29

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

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

例如,我想询问如何从用户选择的位置运行 exe 文件。

即使这不是问题的一部分,我也很高兴看到一些从绝对位置运行 exe 文件的示例,因为我是 wix 的初学者并且第一次这样做。

4

2 回答 2

43

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

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

<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
  <Component Id="TargetProgram" Guid="f757ff43-0266-483a-8749-ec796cba4b25" >
    <File Id="EXE" Source="C:\SetupProject\Includes\TargetProgram.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>
于 2018-08-30T08:40:26.990 回答
14

这可以在 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 步:包含自定义操作

自定义操作包含在使用该<CustomAction>元素的 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 对话框最后一页上的“完成”按钮时运行的操作来完成的。Publish 元素应包含在<UI>第 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 中的复选框并且该应用程序已实际安装(而不是被删除或修复)。

检查此链接以获取详细信息。安装后如何运行exe。我在这里复制它是为了让其他人寻找相同的答案。

于 2013-10-09T14:09:16.350 回答