Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在wxs中未指定ProgramFilesFolder的ProgramFilesFolder的默认安装路径_C#_Wix - Fatal编程技术网

C# 在wxs中未指定ProgramFilesFolder的ProgramFilesFolder的默认安装路径

C# 在wxs中未指定ProgramFilesFolder的ProgramFilesFolder的默认安装路径,c#,wix,C#,Wix,我目前有一个创建MSI的旧版Visual Studio安装项目。有了它,我可以在命令行上指定“TARGETDIR=“somepath”,并将其安装到“somepath”。现在使用WIX,如果我没有在wxs中指定ProgramFilesFolder,“TARGETDIR”仍然有效,但是在安装程序的UI中,默认路径是“C:\Manufacturer\Product”,而我仍然希望它默认为ProgramFilesFolder。支持“TARGETDIR”对于从应用程序本身升级到传统MSI也是必要的 我找

我目前有一个创建MSI的旧版Visual Studio安装项目。有了它,我可以在命令行上指定“TARGETDIR=“somepath”,并将其安装到“somepath”。现在使用WIX,如果我没有在wxs中指定ProgramFilesFolder,“TARGETDIR”仍然有效,但是在安装程序的UI中,默认路径是“C:\Manufacturer\Product”,而我仍然希望它默认为ProgramFilesFolder。支持“TARGETDIR”对于从应用程序本身升级到传统MSI也是必要的

我找到了一些方法将UI默认目录更改为ProgramFilesFolder,但是TARGETDIR没有更改为该目录(或用户指定的目录),因此它仍然安装到C:\Manufacturer\Product

这里有人有什么想法吗?我猜某种自定义操作可以做到这一点,但我觉得我已经尝试了大多数建议,例如:

  • 但这将覆盖或命令行中的任何选定目录
  • 我还尝试创建一个WiX属性“TARGETDIR”以在命令行上公开它,但由于这已经是一个内部属性,所以没有任何区别
  • 如前所述,这将阻止我在命令行上使用“TARGETDIR”
  • 然后使用自定义操作将“TARGETDIR”设置为“APPLICATIONFOLDER”。有了这个,我可以将默认位置设置为ProgramFilesFolder,但是我还没有找到在正确的时间设置“TARGETDIR”以使用命令行值或用户选择的值的方法。我几乎需要一种方法来执行“如果'APPLICATIONFOLDER'不是默认值,请使用它的值,或者如果'TARGETDIR'不是默认值,请使用它的值,否则请使用默认值”。这似乎也不允许变量扩展,所以我不能使用“[ProgramFilesFolder]”,我必须显式写出“C:\ProgramFiles…”,这并不理想

如果INSTALLDIR为空且TARGETDIR有值且未安装,我想您可以使用SetProperty自定义操作为INSTALLDIR赋值。在AppSearch之前,尽早在安装UI和安装执行序列中安排它

WiX INSTALLLOCATION中的FYI更常用。INSTALLDIR更像是InstallShield,TARGETDIR更像是VisualStudio

<SetProperty Id="INSTALLDIR" Value="[TARGETDIR]" Before="AppSearch">Not INSTALLDIR and TARGETDIRDIR and Not Installed</SetProperty> 
未安装dir和targetdir,且未安装

如果INSTALLDIR为空且TARGETDIR有值且未安装,我想您可以使用SetProperty自定义操作为其赋值。在AppSearch之前,尽早在安装UI和安装执行序列中安排它

WiX INSTALLLOCATION中的FYI更常用。INSTALLDIR更像是InstallShield,TARGETDIR更像是VisualStudio

<SetProperty Id="INSTALLDIR" Value="[TARGETDIR]" Before="AppSearch">Not INSTALLDIR and TARGETDIRDIR and Not Installed</SetProperty> 
未安装dir和targetdir,且未安装

谢谢,这似乎成功了。用实现细节更新了我的问题。我的意思不是让您编写自定义操作,而是简单地使用SetProperty。答案更新为未经测试的示例。FWIW当您需要其他业务逻辑(如检查目录是否为固定本地磁盘)时,自定义操作方法可能会很有用,但在其他情况下,它只会增加安装的复杂性和可能的故障点。谢谢,这似乎已经做到了。用实现细节更新了我的问题。我的意思不是让您编写自定义操作,而是简单地使用SetProperty。答案更新为未经测试的示例。FWIW当您希望有额外的业务逻辑(如检查目录是否为固定本地磁盘)时,自定义操作方法非常有用,否则它只会增加安装的复杂性和可能的故障点。
<SetProperty Id="INSTALLDIR" Value="[TARGETDIR]" Before="AppSearch">Not INSTALLDIR and TARGETDIRDIR and Not Installed</SetProperty>