Wix - 如何从安装目录安装后运行exe文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wix - 如何从安装目录安装后运行exe文件?相关的知识,希望对你有一定的参考价值。

我正在使用一个使用wix安装的程序。 (不知道它是否相关,但它是一个C#程序)

我想运行一个由msi文件安装的exe文件,但由于用户选择了安装路径,因此我不知道安装的位置。

我想问一下如何从用户选择的位置运行exe文件。

即使它不是问题的一部分,我也很高兴看到一个从绝对位置运行exe文件的例子,因为我是第一次使用wix并完成所有操作的初学者。

答案

这可以通过WIX Extensions实现。下面的粗体/斜体文本将处理查找EXE的确切位置的情况:)

第1步:将扩展库添加到项目中

如果您在命令行上使用WiX,则需要将以下内容添加到蜡烛和灯光命令行:

-ext WixUIExtension -ext WixUtilExtension

如果您使用的是Visual Studio,则可以使用“添加引用”对话框添加扩展:

Right click on your project in Solution Explorer and select Add Reference...
Select the WixUIExtension.dll assembly from the list and click Add
Select the WixUtilExtension.dll assembly from the list and click Add
Close the Add Reference dialog

第2步:将UI添加到安装程序

WiX Minimal UI序列包括一组基本对话框,其中包括带有可选复选框的已完成对话框。要在项目中包含序列,请在<Product>元素内的任何位置添加以下代码段。

<UI>
    <UIRef Id="WixUI_Minimal" />
</UI>

要在安装程序的最后一个屏幕上显示复选框,请在<Product>元素内的任何位置包含以下代码段:

<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch My Application Name" />

WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT属性由标准UI序列提供,在设置时,将显示复选框并使用指定的值作为复选框标签。

第3步:包含自定义操作

自定义操作包含在使用该元素的WiX项目中。使用WixShellExecTarget自定义操作完成运行应用程序。要告诉Windows Installer有关自定义操作以及设置其属性,请在项目中的<Product>元素内的任何位置包含以下内容:

<Property Id="WixShellExecTarget" Value="[#myapplication.exe]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

Property元素将WixShellExecTarget设置为已安装应用程序的位置。 WixShellExecTarget是WixShellExec自定义操作期望的属性ID将设置为要运行的文件的位置。 *

Value属性使用特殊的#字符告诉WiX使用id myapplication.exe查找文件的完整安装路径。


CustomAction元素包含安装程序中的操作。它被赋予唯一的Id,BinaryKey和DllEntry属性指示自定义操作的程序集和入口点。 Impersonate属性告诉Windows Installer以安装用户身份运行自定义操作。

第4步:触发自定义操作

简单地包括自定义操作(如步骤3),不足以使其运行。还应告知Windows Installer何时应触发自定义操作。这是通过使用<Publish>元素将其添加到用户单击UI对话框的最后一页上的Finished按钮时运行的操作来完成的。 Publish元素应该包含在步骤2的元素中,如下所示:

<Publish Dialog="ExitDialog"
    Control="Finish" 
    Event="DoAction" 
    Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>

Dialog属性指定自定义操作将附加到的对话框,在本例中为ExitDialog。 Control属性指定对话框上的Finish按钮触发自定义操作。 Event属性指示单击按钮时应运行自定义操作,Value属性指定步骤3中包含的自定义操作。元素上的条件阻止操作运行,除非选中步骤2中的复选框并且实际安装了应用程序(而不是被移除或修复)。

请查看此链接了解详情。 How to run exe after install。我在这里复制它是为了其他人寻找相同答案的好处。

另一答案

如果您不需要和UI,Isaiah4110答案不是最好的方法。

执行exe文件目标的最简单方法是通过Wix生成的msi安装自定义操作类型18(通过FileKey识别操作),这里是一个完整的示例:

<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
  <Component Id="TargetProgram" Guid="f757ff43-0266-483a-8749-ec796cba4b25" >
    <File Id="EXE" Source="C:SetupProjectIncludesTargetProgram.exe" />
  </Component>
</ComponentGroup>

<CustomAction Id="EXECUTE_AFTER_FINALIZE"                  
              Execute="immediate" 
              Impersonate="no"
              Return="asyncNoWait"
              FileKey="EXE"
              ExeCommand="" />

<InstallExecuteSequence>
  <Custom Action="EXECUTE_AFTER_FINALIZE" After="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>
</Fragment>

以上是关于Wix - 如何从安装目录安装后运行exe文件?的主要内容,如果未能解决你的问题,请参考以下文章

WiX 引导程序创建的安装程序未启动

WiX MSI 和 EXE 作为一个 EXE

如何使用 WiX 从源代码重建完全相同的 msi 文件?

WiX 安装程序:使用 xslt 和 heat.exe 如何在找到父/子匹配后更改父 ID 的值?

WiX:如何打包 exe 或 dll 以仅在安装期间使用

一旦通过Wix安装到程序文件文件夹,C#exe就无法正常工作