2012-06-07 33 views
1

我有这个WinForms项目(基于this one,但针对SharePoint 2010进行了修改),实际上它是用于安装SharePoint 2010解决方案程序包(.wsp)的安装向导。如何使用Windows窗体项目中的嵌入式资源创建MSI安装程序

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

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

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

希望我很清楚。

谢谢。

UPDATE

只是要清楚,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不是一个生成安装程序本身的工具,安装程序已经编码,它是WinForms项目本身。

回答

1

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

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

+0

是的,在这一点上,我只是寻找一个工具,从我的Winforms项目的输出构建生成一个MSI或EXE自动执行。我已经尝试过IExpress,但它不尊重里面的文件夹,并且当它提取文件都在根文件夹中(并且我拥有像Resources和stuff这样的文件夹)。但我喜欢IExpress的功能。任何替代它? – emzero

+0

我忘了提及,由于IExpress不尊重文件夹,安装程序无法找到一些应该位于/ Resources文件夹下的文件。 – emzero

0

我以前用Wix取得了成功。 http://wix.sourceforge.net/

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

+0

我只是看着它。我的问题是...我已经有了一个WinForms项目,可以满足我的需求。我真的不想重写所有的东西进入WiX。有没有办法在现有的WinForms项目中使用Wix,并只使用它来生成独特的MSI安装程序? – emzero

+0

那么你是说你的winforms应用程序实际上运行了安装代码?如果是这种情况,您可以使用dot net安装程序http://dblock.github.com/dotnetinstaller/。它基本上可以创建一个包含嵌入资源的exe文件。如果我理解你正在尝试做什么,这可能是你需要的。 – Ronnie

+0

是的,winforms实际上是运行安装sharepoint解决方案所需的一切的安装程序。所以是的,我不需要一个完整的安装程序项目,我只需要一种方法将安装项目打包在exe/msi自动执行文件中。我会看看dotnetinstaller。 – emzero

0

像Cosmin Pirvu提到的,你正在寻求一个自解压安装程序。我曾经使用过的一个免费版本来自Chilkat Software,名为ZIP 2 Secure EXE

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

编辑: 使用ILMerge的替代方法是将dll嵌入到您的可执行文件as described here中。

相关问题