我使用自定义的WiXUI_InstallDir UI进行软件安装。在浏览对话框中,我们甚至可以选择C:\作为安装目录。有没有可能的方式,当用户选择C:\时,它会自动添加一个foldername吗?例如如果软件是XYZ软件,那么在浏览到C:\并按OK后,它应该在pathedit中显示c:\ XYZ。
答案 0 :(得分:5)
我偶尔有客户要求这一年,我总是告诉他们没有。它不是标准的Windows Installer实践。基本上你是在试图阻止白痴选择一个糟糕的目录。这实际上是不可能的,因为他们可以选择放置软件的许多愚蠢的地方。如果你真的不相信你的用户,请选择远离[ProgramFilesFolder]我的公司\我的产品。
答案 1 :(得分:2)
我倾向于同意Chris的意见,选择远离标准安装目录。您可以避免各种问题,并且您的软件更符合标准。
更改安装目录的概念可以被视为多年前磁盘空间稀缺且人们安装在各处的反模式或不良安装程序设计的残余。软件安装应该更加标准化,如果选择我将安装锁定到[ProgramFilesFolder] My Company \ My Product,如Chris建议。
有些情况下,您可能希望允许将软件安装在记忆棒或类似介质上。在这些情况下更好的选择是允许特殊安装直接工作 - 换句话说,它是一个没有注册表依赖性的独立应用程序。很少有应用程序安装程序支持这一点 - 我看到的最后一个是Opera的一些版本。完全不同的概念,但仅通过更改安装路径来允许非标准安装更有意义。
答案 2 :(得分:1)
尽管我同意应该在Program Files下安装软件,但我正在编写一个按照您的描述运行的代码。在此代码中,如果用户选择C:\
,则会将其安装到C:\Program Files\XYZ
。如果选择了另一个根文件夹,则会将其安装到D:\XYZ
。如果您愿意,可以进一步扩展此代码。
假设您的目录结构为
<Directory Id="TARGETDIR" Name="SOURCEDIR">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLLOCATION" Name="XYZ" />
</Directory>
</Directory>
代码使用PathEdit
UI控件
<Control
Id="customPathEdit"
Type="PathEdit"
Property="TARGETDIR"
Fixed="Yes"
Remote="Yes"
X="10"
Y="10"
Width="100"
Height="17">
<Publish
Property="INSTALLLOCATION"
Value="[ProgramFilesFolder]XYZ\"
Order="1"
<![CDATA[TARGETDIR << %SYSTEMDRIVE]]>
</Publish>
<Publish
Property="INSTALLLOCATION"
Value="[TARGETDIR]XYZ\"
Order="2"
<![CDATA[NOT (TARGETDIR << %SYSTEMDRIVE)]]>
</Publish>
</Control>
当然,我们需要PushButton
控件来警告安装程序路径已更改:
<Control
Id="OkButton"
Type="PushButton"
Height="17"
Width="56"
x="50"
Y="70"
Text="OK">
<Publish
Event="SetTargetPath"
Value="INSTALLLOCATION"
Order="1">1</Publish>
<!--Another publish element is required to go to the next dialog-->
</Control>
仅当用户选择INSTALLLOCATION
时,第一个发布元素才会将属性[ProgramFilesFolder]XYZ\
设置为路径%SYSTEMDRIVE
。仅当用户未选择%SYSTEMDRIVE
时才使用第二个发布元素。最后一个发布元素调用SetTargetPath
事件以将新安装路径保存到安装会话。