我想用Microsoft Wix 3.8构建一个安装程序,它实际上只注册了一些COM组件,并为服务器共享上的程序创建了一些快捷方式。只是提前指出:这个程序是一个传统的工具,不幸的是它的启动或使用方式不会被改变。 所以我需要我的安装程序要求三个路径:服务器安装路径(如unc),以及另外两个路径,也在服务器上(也作为unc)。
我已经在第一条路上挣扎了。一旦我添加它,它似乎很难连接到我必须在我的product.wxs中指定的某个目录。
这就是我的product.wxs的样子:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<Product Id="613A5421-BF59-46DD-B363-05E55587B89F" Name="Test Client" Language="1033" Version="1.0.0" Manufacturer="Blub AG" UpgradeCode="A451E5EB-4AED-4A8A-ACBC-F65A34E86D45">
<Package Id="*" InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MediaTemplate />
<WixVariable Id="WixUIDialogBmp" Value="images\background.bmp" />
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
<UIRef Id="WixUI_InstallDir" />
<Feature Id='Complete' Title='Foobar 1.0' Description='The complete package.'>
<Feature Id='TestClient' Title='Test Client' Description='Test Client' Level='1'>
<ComponentGroupRef Id='ProductComponents' />
</Feature>
</Feature>
</Product>
<Fragment>
<PropertyRef Id="NETFRAMEWORK20"/>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="ExpoWin" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER" >
<Component Id="ProductComponent">
<File Source="Blub.txt" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
(在我的原始代码中,我用自己的版本替换了WixUI_InstallDir,以便我可以修改它以询问三个路径。但要指出我的问题,上面的代码应该足够了) 我不想要&#34; INSTALLFOLDER&#34;链接到任何目录。但是一旦我改变了
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
到
<Property Id="WIXUI_INSTALLDIR" Value="SERVERPATH" />
<Property Id="INSTALLFOLDER" Value="c:\program files (x86)\TestClient" />
然后运行安装程序我得到了&#34; 2343错误&#34;:
DEBUG:错误2343:指定的路径为空。 安装程序在安装此程序包时遇到意外错误。这可能表明此包装存在问题。错误代码是2343.参数是:,,
希望这个问题很容易回答。我在网上搜了几个小时。可能我完全不理解财产的概念。有人可以对此有所了解吗?
答案 0 :(得分:0)
以下解释可能无效100%,这是我向自己解释的方式;-)。
WiX获取属性的值并使用它来解析路径。在第一种情况下,它在目录结构中找到属性,因此可以解析路径。在第二个示例中,SERVERPATH
只是字符串SERVERPATH
,因此无法找到任何内容。您必须使用注册表搜索或具体路径或自定义操作来设置它
在UI和自定义对话框中对我有用的东西(我对安装文件夹和附加路径有类似的要求)是answer to a similar question。
以下是通过自定义操作设置它的示例(在我的案例中,INSTALLLOCATION
是从注册表中读取的,但它可以是任何路径; INSTALLDIR
由WiX中的目录结构定义源文件):
<CustomAction Id="SetINSTALLDIR" Property="INSTALLDIR" Value="[INSTALLLOCATION]" Execute="firstSequence" />
<InstallExecuteSequence>
<Custom Action="SetINSTALLDIR" After="AppSearch">INSTALLLOCATION</Custom>
</InstallExecuteSequence>
<InstallUISequence>
<Custom Action="SetINSTALLDIR" After="AppSearch">INSTALLLOCATION</Custom>
</InstallUISequence>
使用上面答案中描述的方法,我的WiX源文件中包含以下内容:
<Directory Id="LUCENEFOLDER" SourceName="LuceneIndex" />
然后,通过以下代码段在自定义对话框的UI中设置路径:
<Control Id="LuceneFolderLabel" Type="Text" X="5" Y="155" Width="200" Height="10" Text="Folder containing Multiindex.config of Lucene:" TabSkip="yes" />
<Control Type="PathEdit" Id="LuceneFolder" Width="200" Height="17" X="5" Y="165" Property="LUCENEFOLDER"/>
<Control Id="LuceneFolderBrwsButton" Type="PushButton" Width="56" Height="17" X="210" Y="164" Text="Change..." >
<Publish Property="_BrowseProperty" Value="LUCENEFOLDER" Order="1">1</Publish>
<Publish Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
</Control>