gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:44:34 25 4
gpt4 key购买 nike

我目前正在处理 Visual Studio 2010 安装项目,想知道以下是否可行:

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

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

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

建议、链接等表示赞赏谢谢!

*更新 1 *

我可以从 C# 代码启动 .msi 并同时传递一个值吗?

这家伙在这里做了什么: link

但是传递一个值...然后从我的自定义安装类我根据这个值采取行动。

更新 2

看来我可以: link code project

更新 3

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

1) 启动 winforms 应用程序。
2) 进行一些webService调用,显示数据,用户进行选择。
3) 根据更新 1 中的链接,启动过程(静默模式)和每个更新 2,传递选定的值。
4) 使用一些跨进程事件机制 (WCF),以便我的自定义安装类可以将其运行的不同步骤通知我的表单,并更新进度条和消息。

最佳答案

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

  1. 加载自定义 Action dll
  2. 如果它是托管的,则启动 CLR 并执行您托管的代码
  3. 离开自定义操作时,卸载 dll 并关闭 clr

每次调用自定义操作时都会执行此操作。这是自定义操作通常用 C++ 编写的主要原因之一。

为了更加灵活,您应该使用 WIX允许 .NET 与 MSI 集成的工具包。 MSI 本身对 .NET 一无所知,它是一个独立的世界。MSI 本身通过 Dialog 等表格在 msi 内部定义对话框和控件和 Control table 。您可以创建一个对话框并将您的状态存储在需要发生的每个 msi 操作之间的 msi 属性中,例如计算所选功能的磁盘空间等。但我怀疑这一解决方案是否高效,而且我担心在一个进程中如此频繁地启动和关闭 CLR 会使您面临以前从未遇到过的 CLR 错误。

要设置目标位置,您只需调用 MSI 方法 MsiSetTargetPath您可以非常轻松地调用它。

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

您的, 阿洛伊斯·克劳斯

关于c# - 使用自定义表单设置项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5053206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com