如何使用Windows窗体项目中的嵌入资源创建MSI安装程序

时间:2012-06-07 19:26:54

标签: winforms windows-installer installation

我有这个WinForms项目(基于this one,但已针对SharePoint 2010进行了修改),它实际上是用于安装SharePoint 2010解决方案包(.wsp)的设置向导。

除了安装.wsp之外,该项目还在SQL Server数据库上运行一些.sql脚本。

我的问题是如何创建一个MSI / EXE安装程序,其中嵌入了所有资源(.wsp文件,.sql文件,图像),因此我只有一个要分发的文件?

请注意,使用Visual Studio安装项目不是一个选项,因为它会生成安装程序以安装安装程序。我不需要,WinForms项目是安装程序。

希望我足够清楚。

感谢。

更新

为了清楚起见,WInFroms项目 IS 是安装程序。它包含向导对话框并运行代码以安装Sharepoint解决方案,运行SQL脚本等。

当我编译项目时,我最终得到了一堆具有以下结构的文件:

\en-us
\Resources
SomeThirdParty.dll
AnotherThirdParty.dll
Setup.application
Setup.exe
Setup.exe.config
Setup.exe.manifest
Setup.pdb
Setup.vshost.application
Setup.vshost.exe
Setup.vshost.exe.config
Setup.vshost.exe.manifest

我需要的是一个在MSI安装程序中打包所有内容的工具,它将自动解压缩并自动执行setup.exe NOT 一个生成安装程序的工具,安装程序已经编码,它是WinForms项目本身。

3 个答案:

答案 0 :(得分:1)

Advanced Installer支持此功能,但您需要的功能仅在许可版本中可用。基本上,您可以创建一个MSI包装器,只需启动项目并执行SQL脚本或尝试使用其专用的SharePoint支持。

另一种方法是IExpress。一个自解压EXE,用于启动其中包含的文件。

答案 1 :(得分:0)

我过去曾成功使用过Wix。 http://wix.sourceforge.net/

您可以在msi中嵌入资源,这样您只能分发一个文件。此外,您可以通过在c#或vb.net代码中编写自定义操作来完成您需要执行的任何自定义安装步骤。

答案 2 :(得分:0)

与Cosmin Pirvu提到的一样,您要求使用自解压安装程序。我过去使用的是Chilkat Software的免费版本,名为ZIP 2 Secure EXE

如果所有程序集都是.NET,那么您也可以尝试ILMerge将它们全部放入一个程序集中。虽然这对.manifest和.config文件没有帮助。

编辑: 使用ILMerge的另一种方法是将dll嵌入到可执行文件as described here