我一直在寻找一种解决方案,以编程方式覆盖我的应用程序功能的目录路径。
我发现我需要35型自定义操作(https://msdn.microsoft.com/en-us/library/windows/desktop/aa368093(v=vs.85).aspx)
我在互联网上搜索了一段时间,但找不到任何地方可以在C#中创建此类自定义操作。
我当前的自定义操作如下所示:
<CustomAction Id="CheckForSynergyInstallation"
Return="check"
Execute="immediate"
BinaryKey="Real.CustomActions"
DllEntry="GetVersionInformation" Directory="SYNERGY_FEATURE_FOLDER" />
像这样的C#代码:
var synergyFolder = new FileInfo(exactSynergyVersionConfigurationFile).Directory.FullName;
log.Info($"Synergy Folder set to {synergyFolder}");
session["SYNERGY_FEATURE_FOLDER"] = synergyFolder;
最佳答案
类型35自定义操作调用MsiSetTargetPath来更改目录的位置。如果您已经具有基于DTF的自定义操作,则可以调用session.SetTargetPath
而不是设置属性。
如果还没有基于代码的自定义操作,则可以将CustomAction element与较少的参数一起使用以产生类型35的操作。即省略BinaryKey和DllEntry:
<CustomAction Id=... Return=... Execute=...
Directory="SYNERGY_FEATURE_FOLDER" Value="location"/>