C# 使用自定义表单设置项目

C# 使用自定义表单设置项目,c#,deployment,installation,setup-project,C#,Deployment,Installation,Setup Project,我目前正在从事一个Visual Studio 2010安装项目,希望了解是否有以下可能: 1) 以默认表单不显示的方式运行安装项目,相反,我会显示订阅安装项目事件的自定义表单。这样我可以显示安装消息并增加自己的进度条 2) 如果1是可能的,我需要一种方法来指定默认位置 3) 我有一个单独的库项目,其中我有一个自定义安装类(从“System.Configuration.install.Installer”继承),在安装处理程序中,我希望能够显示自定义windows窗体,并控制用户所做的选择。我想这

我目前正在从事一个Visual Studio 2010安装项目,希望了解是否有以下可能:

1) 以默认表单不显示的方式运行安装项目,相反,我会显示订阅安装项目事件的自定义表单。这样我可以显示安装消息并增加自己的进度条

2) 如果1是可能的,我需要一种方法来指定默认位置

3) 我有一个单独的库项目,其中我有一个自定义安装类(从“System.Configuration.install.Installer”继承),在安装处理程序中,我希望能够显示自定义windows窗体,并控制用户所做的选择。我想这可以通过添加对system.windows.forms的引用来实现,但这是正确的方法吗?如果我不能隐藏默认的安装表单,这些自定义表单将显示在默认的安装表单上,我认为它看起来太棒了

建议、链接等,不胜感激 谢谢

*更新1*

我可以从c#代码启动一个.msi,但也要传入一个值吗

这家伙在这里做什么:

但是传递一个值。。。然后从我的自定义安装类中,我根据该值采取操作

更新2

看来我能:

更新3

我正在考虑执行以下操作,我将开始使用winforms应用程序进行测试

1) 启动winforms应用程序。
2) 进行一些Web服务调用,显示数据,用户进行选择。
3) 根据更新1中的链接,启动过程(静默模式),并根据更新2,传入所选值。

4) 使用一些跨进程事件机制(WCF),以便我的自定义安装类可以向我的窗体通知其运行的不同步骤,并更新进度栏和消息。

据我所知,Visual Studio所做的安装项目非常有限,除非您使用。这些自定义操作可能需要大量时间来创建和调试,因此使用更成熟/更具特色的工具(如

编辑至于使用winforms显示窗口:这没问题,但是:良好的设置允许静默/脚本安装,请确保您允许这样做。另一件需要注意的事情是机器没有.NET,因此无法显示表单。。。除非您确定.NET(正确版本)存在,否则这是不允许的

编辑2回应一些评论:有些场景无法通过VISUAL STUDIO安装和部署项目实现。我不是说Windows安装程序不好。例如,尝试创建一个自定义安装程序,以确定将在何处安装应用程序,并跳过项目生成的标准窗口。我并不是说定制操作是有限的,但它们也不容易

此外,当您想使用自定义WinForms而不是安装程序窗体时,必须确保在显示任何(WinForm)窗口之前完成.NET framework的引导。这可能是可能的,但如果您想要这样的定制,您最好使用更灵活的工具。

您可以创建,但声明需要在MSI内部完成。您可以通过自定义操作显示自定义对话框,但这对您没有多大帮助,因为msi执行以下操作:

  • 加载自定义操作dll
  • 如果对其进行管理,CLR将启动并执行maanged代码
  • 当自定义操作离开时,dll被卸载,clr被关闭
  • 每次调用自定义操作时都会执行此操作。这是自定义操作通常用C++编写的主要原因之一。p> 为了更灵活,您应该使用允许.NET与MSI集成的工具包。MSI本身对.NET一无所知,是自己的世界。 MSI本身通过表(如and表)定义MSI内部的对话框和控件。 您可以在需要执行的每个msi操作之间创建一个对话框并将状态存储在msi属性中,例如,计算所选功能的磁盘空间等。但我怀疑这个解决方案是否有效,我担心在一个进程内频繁启动和关闭CLR会使您暴露在以前没有人遇到过的CLR错误中

    要设置目标位置,只需调用MSI方法,PInvoke方法非常简单

    要禁用普通UI,您可以完全或部分覆盖它,但我没有尝试仅禁用特定对话框。如果要隐藏特定对话框,应检查当前msi的msi表,以检查是否可以设置msi属性,使对话框认为它已显示

    你的,
    Alois Kraus

    添加了有关使用的信息winforms@Erno谢谢所以,如果我使用静默安装,我的自定义表单会显示吗?在安装之前,我是否可以控制是否存在正确的.net版本?这取决于您如何创建安装程序。安装程序有几个序列(安装、卸载、提交等)和静默/管理安装。请勿在静默安装中使用表单。您必须添加一些引导来检测.NET:@Erno:-1:在.NET中创建自定义操作非常容易。你为什么说它们很难?Windows Installer/自定义操作没有不成熟/受限之处。您可以指定要安装的应用程序的先决条件以及如何对其进行打包(下载或本地)-这将为您进行检测,并在需要时安装所需的框架。谢谢。(请原谅我知之甚少)你提到/建议我应该使用WIX。快速浏览一下维基百科就会发现:“Windows Installer XML(WiX,发音为“wicks”)是一个免费的软件工具集,可以从XML文档中构建Windows Installer(MSI)包”,读了这篇文章,我感觉自己回到了起点。VS2010安装项目生成.msi。WIX是否允许我按照自己的意愿完全自定义.msi?(海关表格