从提取的安装文件创建MSI

时间:2018-08-20 14:12:13

标签: installation windows-installer installshield

我有一个带有第三方安装程序的文件夹,该文件夹包含setup.exe及其旁边的所有CAB文件(以及许多相关文件夹)。

folder content

我希望能够将此第三方安装程序重新打包为可以在我的主应用程序安装程序中使用的必备软件(或作为链接的msi软件包)。

我不仅要提取/复制客户端计算机上的那些文件,还要运行安装程序。

是否可以使用Installshield从所有这些文件创建MSI?我似乎找不到能做到这一点的项目类型。

3 个答案:

答案 0 :(得分:0)

我是一个InstallShield菜鸟,正在寻求类似问题的帮助,但对于您的需要,基本的MSI项目就足够了。

如果您使用的是Project Assistant向导,则在转到“应用程序文件”部分时,将各种文件夹和setup.exe拖放到向导中的INSTALLDIR文件夹中,我想就是这样

从其他问题中回想起,我曾创建过非安装的SQL Server MSI,Install Shield将自动识别您的setup.exe,并在运行.MSI时运行它。

答案 1 :(得分:0)

问题方案 :您的方案是什么?

  • 您是否要接管旧设置的处理和更新,并且需要将其转换为正确的格式?
  • 您是否要重新打包第三方供应商setup.exe?
  • 您是否要保留CAB中的文件?或者只是提取文件,以便可以通过其他方式重新打包它们。出于某种原因?
  • 您是否正在尝试以静默方式尽可能轻松可靠地安装整个shebang?
  • 其他一些问题情况?

静音运行? :如果您只需要静默安装,则大多数 setup.exe 包装器将允许您执行此操作,但是对于用于创建setup.exe文件的每个工具而言,包装器都不同。 Installshield的setup.exe文件需要一个静默响应文件,其他工具则采用不同的方式。 I wrote about Installshield silent uninstall a couple of days ago。还有here is a piece on regular silent install and various types of Installshield setup.exe files

记录响应文件:

Setup.exe /r /f1”c:\temp\my-answer-file.iss”

基本静默安装:

Setup.exe /s /f1”c:\temp\my-answer-file.iss”

如果setup.exe是MSI的包装,并且您有一个分发系统可用来分发必备组件,则通常最好在公司环境中提取MSI,并且使用MSI中的标准功能以静默方式运行( /QN msiexec.exe 开关):

msiexec.exe /I "C:\Your.msi" /QN /L*V "C:\msilog.log" TRANSFORMS="C:\1031.mst;C:\My.mst"

快速参数说明:

/I = run install sequence
/QN = run completely silently
/L*V "C:\msilog.log" = verbose logging
TRANSFORMS="C:\1031.mst;C:\My.mst" = Apply transforms 1031.mst and My.mst (see below).

文件提取? :将文件从 setup.exe 中提取出来可能很困难,也很容易。它取决于构建它的目的,并且几乎可以是“任何东西”-从已建立的部署工具到“任何人”制作的专有软件。要从各种 setup.exe 中提取文件,您可以在此答案中找到大量信息:

基本上,您将 setup.exe /stage_only 用于Installshield Suite可执行文件。 setup.exe /a 用于基本MSI和Installscript MSI可执行文件。 setup.exe /s /extract_all 用于旧版Installscript可执行文件。以下说明。

  

MSI导入 :如果您要提取文件并在其中看到一个MSI文件,   那么您应该能够导入或打开该MSI文件   Installshield(或其他部署工具)。


我将尝试提取选项的快速“简短列表”(不确定是否是您真正需要的):

已经有MSI? :您知道 setup.exe 包含什么吗?从技术上讲,它可能已经是包含MSI文件的包装程序,或者它可能是某些旧式部署工具的输出,而不是Windows Installer。让我们只列出几个选项:

  1. Administrative Installation:尝试在命令提示符下执行 setup.exe /a ,以查看是否出现“提取文件”对话框。如果是这样,请指定输出位置并解压缩所有文件。这表明MSI设置包含在setup.exe中。
  2. 安装脚本设置 :尝试从命令提示符处进行 setup.exe /s /extract_all ,以查看是否可以从CAB中提取文件。这用于Installscript设置。或也尝试 /extract_all:[path]
  3. Installshield套件设置 :尝试在命令提示符下执行 setup.exe /stage_only Lots of elaborate details here
  4. Advanced Installer :尝试执行 setup.exe /extract "C:\My work" setup.exe /x >
  5. WiX :在命令提示符下尝试以下操作: dark.exe -x outputfolder setup.exe 。只能使用dark.exe工具从框架本身提取WiX setup.exe文件。换句话说,您需要安装WiX才能提取WiX setup.exe(到目前为止)。
  6. Wise :Wise不再销售,但仍有许多较旧的设置。您可以尝试使用 setup.exe /X [path] 提取文件。
  7. Repackaging :从较旧的传统setup.exe安装程序创建MSI程序包的一种方法是“捕获”所做的更改通过使用Application Repackaging Tool来监视系统,该程序在运行setup.exe时监视对系统所做的更改。

不可能涵盖所有可能的setup.exe文件。它们可能具有各种不同的命令行开关。 There are so many possible tools that can be used。 ({non-MSIMSIadmin-toolsmulti-platform等)。

诸如Inno Setup之类的常用工具似乎使提取变得困难(unofficial unpacker,不是我尝试过的,而是由virustotal运行的)。 NSIS似乎使用标准存档软件可以打开的常规存档。

常规技巧 :一种技巧是启动setup.exe,并在 1)系统的临时文件夹中查找提取的文件。另一个技巧是使用 2)7-Zip,WinRAR,WinZip 或类似的存档工具来查看它们是否可以读取格式。有些人通过 3)在Visual Studio中打开setup.exe 来声明成功。不是我使用的技术。


某些链接

答案 2 :(得分:0)

  

这种外观类似于旧版Installshield setup.exe 或   安装脚本MSI setup.exe 。尽管外观相似,但它们是非常不同的野兽。

     

我会尝试以下方法来确定您要处理的内容:

setup.exe /a
     

如果出现对话框询问您是否需要输出文件夹,   安装脚本MSI。提取文件,然后在中查找MSI   输出文件夹。

     

如果这样不起作用,请尝试setup.exe /s /extract_allsetup.exe /extract_all:[path]。或try this answer


Installshield Suite项目 :看到您想将此设置作为自己的应用程序部署的一部分进行分发时,我可能会使用 Installshield Suite Project >-如果您具有支持此项目类型的Installshield版本的许可证。 See screen shot here

Silent_Install.bat 文件(以及相关的 Silent_Uninstall.bat 用于卸载)应包含将软件包插入其中时需要使用的命令行套件项目。然后,您还将自己的应用程序包含在套件安装中。确保在所有部署方案中都进行良好的测试:安装,升级,修改,卸载,修补等...总会有惊喜。

重新打包 :或者,您也可以使用捕获工具将安装程序重新打包,而不是以现有格式“按原样”运行它。然后,您基本上可以通过监视安装来“记录”安装程序所做的更改。在大多数情况下,此方法有效,但需要大量知识才能正确清理。 There are also challenges for multi-lingual setups - which this appears to be 。该方法已在公司中广泛使用,以将旧版安装程序转换为MSI格式-并且仍在使用。最终结果是可以以标准Windows Installer方式以静默方式安装MSI(这是可靠的-比以静默方式运行的旧版setup.exe更为可靠)。尽管原则上您可以将捕获的MSI包装到您自己产品的MSI中,但我仍会将其包装在套件项目中。我不建议这样做-有几个原因。最重要的是,您可能需要自行更新运行时设置-无需重建自己的MSI。