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

m0rkklqb  于 2023-11-20  发布在  .NET
关注(0)|答案(2)|浏览(226)

我正在使用一个程序,它正在使用wix安装。(不知道它是否相关,但它是一个C#程序)
我想运行一个由msi文件安装的exe文件,但由于用户选择了安装路径,因此我不知道安装的位置。
我想问的是如何从用户选择的位置运行exe文件的例子。
尽管这不是问题的一部分,但我也很高兴看到一些从绝对位置运行exe文件的例子,因为我是wix的初学者,而且是第一次这样做。

yvfmudvl

yvfmudvl1#

如果你不需要UI,Isaiah 4110的答案不是最好的方法。
通过WiX生成的MSI文件执行您正在安装的exe文件目标的最简单方法是使用自定义操作类型18(通过FileKey/FileRef识别操作),这里是v3/v4的完整示例:
WiX v3:

  1. <Fragment>
  2. <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
  3. <Component Id="TargetProgram" Guid="f757ff43-0266-483a-8749-ec796cba4b25" >
  4. <File Id="EXE" Source="C:\SetupProject\Includes\TargetProgram.exe" />
  5. </Component>
  6. </ComponentGroup>
  7. <CustomAction Id="EXECUTE_AFTER_FINALIZE"
  8. Execute="immediate"
  9. Impersonate="no"
  10. Return="asyncNoWait"
  11. FileKey="EXE"
  12. ExeCommand="" />
  13. <InstallExecuteSequence>
  14. <Custom Action="EXECUTE_AFTER_FINALIZE" After="InstallFinalize">NOT Installed</Custom>
  15. </InstallExecuteSequence>
  16. </Fragment>

字符串
WiX v4:

  1. <Fragment>
  2. <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
  3. <Component Id="TargetProgram" Guid="f757ff43-0266-483a-8749-ec796cba4b25" >
  4. <File Id="EXE" Source="C:\SetupProject\Includes\TargetProgram.exe" />
  5. </Component>
  6. </ComponentGroup>
  7. <CustomAction Id="EXECUTE_AFTER_FINALIZE"
  8. Execute="immediate"
  9. Impersonate="no"
  10. Return="asyncNoWait"
  11. FileRef="EXE"
  12. ExeCommand="" />
  13. <InstallExecuteSequence>
  14. <Custom Action="EXECUTE_AFTER_FINALIZE" After="InstallFinalize" Condition="NOT Installed" />
  15. </InstallExecuteSequence>
  16. </Fragment>

展开查看全部
wqsoz72f

wqsoz72f2#

这可以在WIX扩展的帮助下实现。下面的 * 粗体/斜体 * 文本将处理查找EXE的确切位置的情况:)

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

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

  1. -ext WixUIExtension -ext WixUtilExtension

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

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

第二步:在安装程序中添加UI

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

  1. <UI>
  2. <UIRef Id="WixUI_Minimal" />
  3. </UI>


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

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


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

第三步:加入自定义动作

自定义操作包含在使用<CustomAction>元素的WiX项目中。运行应用程序是通过WixShellExecTarget自定义操作完成的。要向Windows XP通知自定义操作并设置其属性,请在项目中<Product>元素内的任何位置包含以下内容:

  1. <Property Id="WixShellExecTarget" Value="[#myapplication.exe]" />
  2. <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 NT以安装用户的身份运行自定义操作。

第四步:触发自定义动作

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

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


Dialog属性指定自定义操作将附加到的对话框,在本例中为ExitDialog。Control属性指定对话框上的“完成”按钮触发自定义操作。Event属性指示单击按钮时应运行自定义操作,Value属性指定步骤3中包含的自定义操作。元素上的条件阻止操作运行,除非复选框检查了步骤2中的应用程序,并且实际安装了应用程序(而不是删除或修复)。
检查这个链接的细节。How to run exe after install。我复制它在这里的利益,其他人寻找相同的答案。

展开查看全部

相关问题