Deq*_*ing 17 installer windows-installer wix
以下目录设置对我来说非常适合.
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id="ProgramFilesFolder">
<Directory Id='INSTALLDIR' Name='MyApp'/>
</Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将"ProgramFilesFolder"更改为" LocalAppDataFolder "时,在使用light链接和生成我的msi 时遇到了很多错误:
D:\runGroup.wxs(53) : error LGHT0204: ICE38: Component cmpA5561BE36D80EB58252E69DDA0C2FF8C installs to user profile. It must use a registry key under HKCU as its KeyPath, not a file.
D:\main.wxs(38) : error LGHT0204 : ICE64: The directory INSTALLDIR is in the user profile but is not listed in the Remove File table.
看起来"LocalAppDataFolder"对于WiX来说是不可接受的,而我相信它是这里定义的系统文件夹属性之一.
我应该为LocalAppData文件夹使用什么?
tro*_*nda 11
我将应用程序从perMachine安装转换为perUser安装.为了正确转换安装,我必须为我拥有的每个组件添加一个注册表项.
最初我有以下内容:
<Component Id="C.MyExe">
<File Id="Fi.MyExe" Name="$(var.MyExe.TargetFileName)" Source="$(var.MyExe.TargetPath)" DiskId="1">
<Shortcut Id="SC.StartMenu"
Directory="D.ApplicationMenuDir"
Name="$(var.AppName)"
WorkingDirectory="INSTALLDIR"
Icon="MY_ICON.ico"
IconIndex="0"
Advertise="yes"
/>
...
Run Code Online (Sandbox Code Playgroud)
当我将exe组件移动到用户安装时,我必须做这样的事情:
<Directory Id="LocalAppDataFolder" Name="AppData">
<Directory Id="MyAppDirectory" Name="$(var.AppName)">
<Component Id="C.MyExe" Guid="{MY_GUID}">
<CreateFolder />
<RemoveFolder Id="RemoveMyAppDirectory" On="uninstall" />
<RegistryKey Root="HKCU" Key="Software\MyCompany\MyApp">
<RegistryValue Name="MainExe" Value="1" KeyPath="yes" Type="integer" />
</RegistryKey>
<File Id="Fi.MyExe" Name="$(var.MyExe.TargetFileName)"
Source="$(var.MyExe.TargetPath)" DiskId="1" Checksum="yes">
</File>
</Component>
...
Run Code Online (Sandbox Code Playgroud)
最重要的部分是您必须添加指向的注册表项HKEY_CURRENT_USER.我为每个组件添加了一个注册表值,表明该组件已安装.
我还必须删除以下内容:Advertise="yes".
好吧,刚刚发现我们可以通过覆盖“ProgramFilesFolder”来做到这一点:
<SetProperty Id="ProgramFilesFolder" Value="[LocalAppDataFolder]" Before="CostFinalize"><![CDATA[NOT Privileged]]></SetProperty>
Run Code Online (Sandbox Code Playgroud)
另一件要做的事情是,<Package>我们需要设置InstallPrivileges为limited.
好吧,我不明白为什么“ProgramFilesFolder”可以直接使用而“LocalAppDataFolder”不能。
| 归档时间: |
|
| 查看次数: |
18532 次 |
| 最近记录: |