C# 使用命令行选项将msi转换为exe。。。

C# 使用命令行选项将msi转换为exe。。。,c#,command-line,windows-installer,C#,Command Line,Windows Installer,我想将中的msi文件转换为exe文件。当我使用msiexec运行带有qn选项的msi文件时,我的软件将以静默方式安装。但现在我想将该msi文件转换为.exe文件,该exe文件运行msi文件,并带有msiexec/i“msi文件路径”/qn选项,知道如何操作吗。您应该使用flexa软件的install shield产品。您可以将msi压缩到.exe中,其中包含安装时用于提取的所有支持文件。我们可以使用7zip SFX创建无开关安装程序。这是一个快速的穿行 要求 7Zip:您可以从下载最新版本的7

我想将中的msi文件转换为exe文件。当我使用msiexec运行带有qn选项的msi文件时,我的软件将以静默方式安装。但现在我想将该msi文件转换为.exe文件,该exe文件运行msi文件,并带有msiexec/i“msi文件路径”/qn选项,知道如何操作吗。

您应该使用flexa软件的install shield产品。您可以将msi压缩到.exe中,其中包含安装时用于提取的所有支持文件。

我们可以使用7zip SFX创建无开关安装程序。这是一个快速的穿行

要求
  • 7Zip:您可以从下载最新版本的7Zip

  • 7Zip SFX模块:正式下载页面已关闭

  • 资源黑客或任何其他资源编辑器(可选):如果要为最终可执行文件使用自定义图标,应使用资源编辑器应用程序,并用所需图标替换该图标。这里是资源黑客应用程序从它的开发者网站

步骤1: 在您的
msi
文件的同一文件夹中创建
exec.bat
文件,并在其中复制您的
msiexec/i“msi文件路径”/qn
。我在示例中使用了Installer.msi,因此下面是我的文件:

@Echo off
msiexec /i installer.msi /qn
步骤2: 将
msi
bat
文件压缩到
7z
存档。(您可以从下载并安装7zip)在示例中,我将myInstaller.msiexec.bat压缩到Installer.7z存档

步骤3: 下载并提取7zSD(从7zSfx链接),并将文件放在存档的同一文件夹中,如下所示

步骤4(可选): 我们可以更改安装程序的图标,为此,我们应该替换
7zsd.sfx
文件的图标,在Resource hacker中,我们应该打开
7zsd.sfx
,进入
IconGroup>101>1049
并用所需的图标替换该图标。然后将新的sfx文件保存在生成的7z归档文件的同一文件夹中。我将我的保存为7zsdInstaller.sfx

步骤5: 我们应该创建一个配置文件,告诉
Sfx
文件在提取归档文件后要做什么,下面是示例的配置文件:

;!@Install@!UTF-8!
GUIFlags="8+32"
ExtractDialogText="My Sample Installer"
RunProgram="exec.bat"
;!@InstallEnd@!
我们应该把它保存在7z档案的同一个文件夹中,我把它命名为mineconfig.txt

步骤6: 现在,我们应该将文件合并到单个可执行文件中,为此,首先我们应该将命令提示符导航到保存生成文件的文件夹,然后执行以下命令:

copy /b 7zsdInstaller.sfx + config.txt + Installer.7z "installer.exe"
现在我们应该在同一个文件夹中有一个installer.exe


如果您自己使用Installshield进行设置,工具本身应该能够创建setup.exe文件,只需在中设置发布设置-我认为这只需要将发布设置为“压缩”,但可能需要进一步设置

请严格遵守。Installshield的某些版本(express、旧版本等)可能没有此选项,但坦率地说,我对此表示怀疑。你一看就知道了


也许还可以看到和前面的stackoverflow问题:

我想WinZip和自解压exe可以做到这一点。我如何定义命令行的选项来运行该命令行?如果客户端不需要自解压exe,他只需要下载它,双击它就会自动安装..你创建了msi吗,还是第三方?如果你创造了它,你用了什么?(WiX、InstallShield、Nullsoft等)我正在使用InstallShield创建msi@AnoopMishra,我更新了答案,您应该从提供的链接下载并安装7zip,然后选择这两个文件,并使用7zip压缩archiver@KostiaMololkin
%errorlevel%
应该可以做到这一点,例如,
echo%errorlevel%
打印批处理文件中执行的最后一个命令的退出代码,但当我在exec.bat@echo off msiexec/i installer.msi/qn exit%errorlevel%@kostiamolkin中放置%errorlevel%时,我应该放置%errorlevel%自我提取的exe返回成功(0)或9009,这是一个伪环境变量,您应该首先执行命令,然后检查有关执行的
%errorlevel%
信息,因此从逻辑上讲,它应该出现在命令后的下一行中。这是一个转换问题,不需要购买/使用重型InstallShield