更改WiX的INSTALLFOLDER值

更改WiX的INSTALLFOLDER值,wix,windows-installer,wix3.7,Wix,Windows Installer,Wix3.7,我使用定制的WiXUI\u InstallDir UI进行软件安装。在浏览对话框中,我们甚至可以选择C:\作为安装目录。有没有可能在用户选择C:\时,它会自动在其中添加一个foldername?e、 g.如果软件是XYZ软件,则在浏览到C:\并按“确定”后,它应该在pathedit中显示C:\XYZ。我一年来偶尔有客户要求使用此软件,我总是告诉他们不。这不是标准的Windows安装程序做法。基本上,你是在试图阻止白痴选择一个坏目录。这实际上是不可能的,因为他们可以选择在许多愚蠢的地方放置软件。如

我使用定制的WiXUI\u InstallDir UI进行软件安装。在浏览对话框中,我们甚至可以选择C:\作为安装目录。有没有可能在用户选择C:\时,它会自动在其中添加一个foldername?e、 g.如果软件是XYZ软件,则在浏览到C:\并按“确定”后,它应该在pathedit中显示C:\XYZ。

我一年来偶尔有客户要求使用此软件,我总是告诉他们不。这不是标准的Windows安装程序做法。基本上,你是在试图阻止白痴选择一个坏目录。这实际上是不可能的,因为他们可以选择在许多愚蠢的地方放置软件。如果你真的不太信任你的用户,请放弃选择,并始终转到[ProgramFilesFolder]我的公司\我的产品。

我倾向于同意Chris的观点,放弃选择,选择标准安装目录。您可以避免各种问题,而且您的软件更符合标准。

更改安装目录的概念可能被视为一种反模式,或者是多年前安装程序设计糟糕的残余,当时磁盘空间不足,人们到处安装。软件安装应该更加标准化,如果允许我选择将安装锁定到[ProgramFilesFolder]我的公司\我的产品,就像Chris建议的那样


在某些情况下,您可能希望将软件安装在记忆棒或类似介质上。在这些情况下,更好的选择是允许一个直接工作的特殊安装——换句话说,它是一个没有注册表依赖项的独立应用程序。很少有应用程序安装程序支持这一点——我最后一次看到的是一些版本之前的Opera。完全不同的概念,但比仅通过更改安装路径来允许非标准安装更有意义。

尽管我同意软件应安装在程序文件下,但我正在编写一段代码,正如您所述。在此代码中,如果用户选择
C:\
,它将被安装到
C:\Program Files\XYZ
。如果选择了另一个根文件夹,它将被安装到,例如
D:\XYZ
。如果愿意,可以进一步扩展此代码

假设您的目录结构如下所示

<Directory Id="TARGETDIR" Name="SOURCEDIR">
<Directory Id="ProgramFilesFolder">
    <Directory Id="INSTALLLOCATION" Name="XYZ" />
</Directory>
</Directory>
当然,我们需要一个
按钮
控件来提醒安装程序路径已更改:

<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>

1.

仅当用户选择了
%SYSTEMDRIVE
时,第一个publish元素才将属性
INSTALLLOCATION
设置为路径
[ProgramFilesFolder]XYZ\
。第二个发布元素仅在用户未选择
%SYSTEMDRIVE
时使用。最后一个publish元素调用
SetTargetPath
事件将新的安装路径保存到安装会话中。

是否希望为每个根目录(C:\、D:\、E:\…等)、仅为C:\、或为每个选定的目录添加此项内容(即,即使用户选择“C:\Program Files\XYZ”,是否也应添加XYZ软件)实际上,我的优先级仅适用于C:\、D:\等。默认安装目录是C:\Program Files\XYZ。如果用户选择任何根目录,那么它应该附加XYZ。您还没有考虑静默安装或希望安装到X:\Program文件的人。小型SSD磁盘的激增使此透视图比以前稍微复杂一些,但我仍然不喜欢非标准安装位置。我更喜欢另一个(辅助)安装位置的系统范围声明。请记住,如果取出包含新辅助位置的辅助磁盘,则会出现故障。没有简单的解决办法。关于清理SSD空间的一些建议:。
<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>