installation - 如何制作仅包装EXE文件的MSI

标签 installation windows-installer

经过太多的实验,我得出的结论是Windows Installer简直是糟糕的技术。但是客户想要MSI文件。

因此,如何创建一个将EXE文件提取到临时目录并使用与传递给EXE文件相同或相似的选项运行它的MSI文件?

Moji的选项在Msiexec (command-line options)中进行了说明(MSI的低级“运行”是msiexec option package.msi)。

编辑:mjmarsh的WiX解决方案看起来像它的作品。我只是还没有机会尝试(锻炼时间)。如果有效,我会接受。

编辑:它不起作用。缺少的部分:有人看管/没有人看管。

无论如何,使这项工作唯一可行的唯一办法就是使用自定义操作杀死其父进程!

编辑:所以有人发布了进一步的答案,将整个内容包装为安装后的自定义操作。从理论上讲可能,但是由于可能需要重新启动(感谢MS for .NET 4有时需要重新启动),因此我们必须进行进一步的黑客攻击。因此,从优势矩阵来看:

Transparency: No. One big custom action.
Customizability: No.
Standardization: No. 
Management and reporting: No. Appears to work but will not.
Security: No benefit.
Validation: No. The hackery required to survive reboot makes this sure to not work.
Resiliency: Completely defeated.
Rollback: No. Rollback didn't work when we were using MSI anyway.
Patching & Updates: No. We have a local solution anyway.
Logging: No. Appears to work but will not.

没有意义。

最佳答案

添加到weir's答案中,如下所示更改custom action attribute:

<!--Run Action-->
    <CustomAction Id="RunWrappedExe"
                  Return="asyncNoWait"
                  FileKey="ApplicationFileId"
                  Execute="deferred"
                  ExeCommand=""
                  HideTarget="no"
                  Impersonate="yes"/>

设置Return=asyncNoWai不会等待exe返回。安装程序完成工作并正常关闭。同时,exe继续执行。

-马杜雷什

关于installation - 如何制作仅包装EXE文件的MSI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/854873/

相关文章:

c# - 使用 C# 生成 msi 转换

windows - msiexec 命令行为注册表中的所有用户安装软件,而不仅仅是管理员?

linux下工具安装Java异常

c++ - 从 docker image build 中省略设置文件

wix - UninstallString 设置为/I 而不是/X 参数

c# - Wix:CustomAction 中二进制文件的路径

visual-studio-2010 - 注册表搜索和自定义操作

mysql 安装程序无法识别 python 3.4

java - 在注册表中找到我的应用程序安装的路径

installation - 由于已弃用的核心音频功能,端口音频将无法安装