我一直在寻找一种解决方案,以编程方式覆盖我的应用程序功能的目录路径。

我发现我需要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"/>

10-07 16:24
查看更多