我们现在已经使用WiX一段时间了,尽管人们普遍抱怨易用性,但它还是相当不错.我正在寻找的是有用的建议:
在WIX中,如何在allusers配置文件中创建非广告的快捷方式?到目前为止,我只能通过广告快捷方式实现这一目标.我更喜欢未公布的快捷方式,因为您可以转到快捷方式的属性并使用"查找目标".
在我看过的教程中,使用注册表值作为快捷方式的keypath.问题是他们使用HKCU作为根.使用HKCU时,另一个用户卸载该程序(因为它是为所有用户安装的),注册表项会被遗忘.当我使用HKMU作为根时,我收到ICE57错误,但当另一个用户卸载该程序时,该密钥将被删除.尽管HKMU看起来行为正确(每用户对所有用户),但我似乎被推向使用HKCU.
当我尝试创建非广告的快捷方式时,我会收到各种ICE错误,例如ICE38,ICE43或ICE 57.我见过的大多数文章都建议"忽略冰错误".必须有一种方法来创建未公布的快捷方式,而不会产生ICE错误.
请发布示例代码以获取工作示例.
我想使用WixUI_Minimal安装程序,但我不想要许可页面.我怎样才能做到这一点?
这是我们在Windows 2008上自动构建套件在运行ICE时(从WiX 2.0 迁移到WiX 3.0之后)引发的错误:
LGHT0217:执行ICE操作'ICE01'时出错.这种ICE故障的最常见原因是错误注册的脚本引擎.有关详细信息以及如何解决此问题,请参见http://wix.sourceforge.net/faq.html#Error217.外部UI消息记录器不期望以下字符串格式:"无法访问Windows Installer服务.如果未正确安装Windows Installer,则会发生这种情况.请联系您的支持人员以获取帮助." 在light.exe(0,0)中
此外,这些是事件日志中显示的错误:
MSIInstaller:无法连接到服务器.错误:0x80070005产品:[ProductName] - 错误1719.无法访问Windows Installer服务.如果未正确安装Windows Installer,则会发生这种情况.请联系您的支持人员以获取帮助
直观:
到目前为止,我已经没有想法了.
如何在保持ICE验证的同时解决此问题?
我应该将我想要安装的所有文件包装在单个组件中吗?将多个文件放在一个组件中有什么好处?
WiX文件似乎总是包含这一行:
<Directory Id="TARGETDIR" Name="SourceDir">
Run Code Online (Sandbox Code Playgroud)
什么是"SourceDir"?它是干什么用的?它不是真正的目录名称.这是一种神奇的价值吗?
我开始使用WiX进行自动构建以创建我的c#项目的msi,并且遇到错误"Undefined preprocessor variable'$(var.MyProject.TargetDir)'"
我使用的是最新的WiX v3.0.5419.在我的wxs文件中,我试图使用此网页上列出的预处理器变量(http://blogs.msdn.com/jrock/archive/2008/01/29/complete-list-of-candle-preprocessor- variables.aspx)
<Component Id="MyId" Guid="MyGuid">
<File Id="MyId" Name="MyName" KeyPath="yes"
Source="$(var.MyProject.TargetDir)\MyName.dll" />
</Component>
Run Code Online (Sandbox Code Playgroud)
我已将MyProject的引用添加到.wixproj中,如果我在记事本中打开它,我可以看到引用.
<ItemGroup>
<ProjectReference Include="..\MyProject.csproj">
<Name>MyProject</Name>
<Project>{guid}</Project>
<Private>True</Private>
</ProjectReference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
这是我用来创建msi的nant构建脚本.也许是因为.wixproj知道构建中没有使用的项目引用?
<exec basedir="${tools.wix}" managed="true" program="candle.exe">
<arg line='-out "${tools.wix.objfile}"' />
<arg value="../MySetup.wxs" />
</exec>
Run Code Online (Sandbox Code Playgroud)
请问有人能开导我吗?
我没有在WiX文档(或Google)中找到这个问题的明确答案.当然我可以在HKCR中编写相应的注册表项,但这让我觉得很脏,我希望这是一个标准的任务,应该有一个很好的默认解决方案.
对于奖励积分,我想知道如何使其"安全",即不要覆盖文件类型的现有注册,并且只有在安装期间注册并且未更改时才删除卸载时的注册.
我找到了一个关于注册DLL的示例,使用Windows Installer XML工具集在MSI文件中注册COM Interop的程序集.,和WiX抱怨"AssemblyRegisterComInterop"属性.
我删除了它并将"Assembly"属性更改为win32,它说我需要指定AssemblyManifest属性,但是我应该放在那里?
wix ×10
wix3 ×10
installer ×2
com ×1
dll ×1
installation ×1
preprocessor ×1
shortcuts ×1
votive ×1
wix3.5 ×1