如何创建wix类型35自定义操作

时间:2016-06-10 06:45:45

标签: c# wix windows-installer

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

我发现我需要一个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;

2 个答案:

答案 0 :(得分:3)

35类自定义操作调用MsiSetTargetPath来更改目录的位置。如果您已经有基于DTF的自定义操作,则可以调用session.SetTargetPath而不是设置属性。

如果您还没有基于代码的自定义操作,则可以使用参数略少的CustomAction element来生成类型35操作。即省略BinaryKey和DllEntry:

<CustomAction Id=... Return=... Execute=...
    Directory="SYNERGY_FEATURE_FOLDER" Value="location"/>

答案 1 :(得分:0)

您是说只是该功能中的文件与设置中的其他文件位于不同的位置?您正在做的事情看起来会导致设置INSTALLFOLDER / TARGETDIR位置,这意味着发往INSTALLFOLDER的所有文件都将转到该位置。当你说你想要一个功能中的文件去某个不同的地方时,这似乎不是你所要求的。

如果您要将某些文件发送到您设置的某个文件夹,并且您希望其余文件转到其预定义位置(ProgramFiles,GAC,Common Files等),那么您基本上只需定义一个目录属性,并指定您在该目录下的组件。您的自定义操作将设置该属性名称,因此目录位置具有所需的值,其余文件将转到它们应该去的位置。