在 C# 中从 Msi 中的自定义操作强制重新启动

2023-12-20

我们如何在 C# 自定义操作中提示安装后重新启动计算机?

我们使用 VS 2005 的安装项目进行安装,并且需要以编程方式决定提示重新启动(因此不会在每次安装时发生,只是在某些安装上发生)。

更新:我们首先正在寻找已经内置于 MSI 自定义操作系统中的东西。如果不存在,我们可以自行重新启动电脑,但希望避免这种情况。

更新:我们看到在 Orca 中编辑 Msi 时可以在哪里设置 REBOOT=Force,您可以在运行时通过 C# 自定义操作修改这些表吗?我们可以将其设置为每次都重新启动,但这可能会使我们的设置变得烦人(只需要在极少数情况下重新启动)。

更新:我们尝试设置:

savedState["REBOOT"] = "Force";

从我们的自定义操作的 Install() 方法中,但运气不佳。 IDictionary、savedState 似乎并没有真正做任何事情。

还尝试过:

Context.Parameters["REBOOT"] = "Force";

但我认为这个集合只是传递给自定义操作的命令行参数。

更新:有没有办法用 Orca 编辑我们的 MSI 来使这个技巧发挥作用?也许在某些文件存在的情况下安排重新启动?我们尚未找到如何从 C# 自定义操作设置 MSI 属性。

更新:我们尝试挂钩 AppDomain.ProcessExit 和 AppDomain.DomainUnload 并启动一个新线程并调用 Process.GetCurrentProcess().WaitForExit() ,但这些事件都不会从 C# 自定义操作中触发...


您需要添加或调用 MSI 自定义操作 ScheduleReboothttp://msdn.microsoft.com/en-us/library/aa371527(VS.85).aspx http://msdn.microsoft.com/en-us/library/aa371527(VS.85).aspx在您的 InstallExecuteSequence 中,.您可以使用 MSI 函数 MsiDoAction 来完成此操作,http://msdn.microsoft.com/en-us/library/aa370090(VS.85).aspx http://msdn.microsoft.com/en-us/library/aa370090(VS.85).aspx在自定义操作内。请注意,安排此操作的自定义操作必须是立即自定义操作,而不是延迟的自定义操作。这意味着您可能需要在 InstallFinalize 之后安排它。您还可以将其添加到 InstallExecuteSequence 中,并在自定义操作设置的公共属性上设置一个条件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中从 Msi 中的自定义操作强制重新启动 的相关文章

随机推荐

  • 使用 Hilt 将存储库注入 Android 中的服务

    我有一个带有 Hilt 依赖注入的 Android 项目 我已经定义了MyApplication and MyModule如下 HiltAndroidApp class MyApplication Application Module In
  • 使用 Javascript 打开 vCard

    使用二维码电子名片 用户用手机扫描该代码 然后手机上会弹出 添加到联系人 对话框 例如下面的代码 我怎样才能做到同样的事情 但我希望它通过单击按钮来完成相同的操作 而不是扫描二维码 我已经尝试过以下方法 var btn document g
  • 如何在 Alpine Docker 镜像上安装 gdbserver 包?

    我一直在尝试在 Alpine Docker 映像上安装 gdbserver 包 https hub docker com alpine https hub docker com alpine apk添加gdbserver 给了我这个 错误
  • Kotlin 如何创建动态对象

    在 javascript 中我们可以做这样的事情 function putritanjungsari data console log data name let data name putri div m4th putritanjungs
  • 选择不具有特定类的元素的最后一个子元素

    我尝试选择没有特定类别的子元素的最后一个元素 我已经设置了一个js fiddle http jsfiddle net VATaj 2
  • 在 Woocommerce 3 中通过 ajax 提交并创建结帐订单

    我在结账表单中添加了一个按钮
  • 为什么引入新的 JSLint 错误“使用空格,而不是制表符”和“不安全字符”?

    我使用 JSLint 验证 JavaScript 已经有大约 2 年了 偶尔会有一些规则发生变化 一般来说 当 JSLint 引入新规则时 会有一个复选框可以在解析时忽略此规则 或者如果您选择不忽略它 则使您的代码符合它 然而 当我今天运行
  • android LiveData 或协程通道

    让应用程序使用 LiveData 和 ViewModel for UI 来观察存储库中的数据更新 它运行良好 现在有人提出 LiveData还没有被很好地采用 也许应该改用协程的通道 首先不确定关于LiveData的说法是否准确 我确信使用
  • Python远程过程调用(不带远程部分)

    我有一个不以 root 身份运行的 Python 服务器 它面向我正在开发的应用程序 然而 有一些应用程序功能需要访问 RAW 套接字 这意味着 root 权限 显然 我不想以 root 身份运行主服务器 因此我的解决方案是创建一个守护进程
  • SQL Server + 实体框架基础知识

    我的任务是用 C 创建一个程序来管理公司的员工 仅简要概述 每个员工的所有信息都存储在 MS SQL 数据库中 作为表示层 我必须使用 WPF 并作为与数据库的通信 LINQ to Entities 问题是 我设法自学了 WPF 但 SQL
  • 制作一个 24/7 运行并从命名管道读取的 Perl 守护进程

    我正在尝试使用 perl 制作一个日志分析器 分析器将在 AIX 服务器上的后台全天候 24 7 运行 并从系统日志将日志定向到的管道 从整个网络 读取 基本上 logs from network gt named pipe A gt pe
  • TDD:您为单元测试公开了哪些方法?

    TDD 有一个方面我从未完全理解 假设有人要求您实现一个简单的 Stack 对象 如果您的设计正确 您将得到一个非常最小且干净的 API 认为 push pop and isEmpty 除此之外 任何事情都会过度抑制需求 并让用户有太多的空
  • 导出和导入 IndexedDB 数据

    我正在制作一个供我自己使用的工具 需要一个简单的数据库 这似乎是学习 HTML5 IndexedDB API 的好机会 但重要的是我在任何时候都不会丢失数据 我想备份浏览器的配置文件目录就可以进行备份 但我也希望可能使用不同的计算机 因此导
  • 从github导入ADT Eclipse中的android项目

    我正在尝试将 android 项目从 github 导入到 ADT Eclipse 中 但当我克隆它时 它在存储库中找不到任何项目 该仓库显然是一个android应用程序项目 从源代码来看 但没有找到可以导入的项目 我的步骤如下 在 包资源
  • 在函数重载中将右值引用实现为参数

    我已经询问过有关代码审查和软件工程的问题 但该主题不适合该网站 因此我在这里询问希望这不是基于意见的 我是一名 老派 C 开发人员 我已经停留在 C 2003 但现在我已经阅读了一些有关现代 C 11 17 的书籍 并且正在重写我的一些库
  • Python3.10源码venv已经改变

    我在个人仓库上做了一些 python leetcode 在我将 Kubuntu 升级到 22 04 后 我意识到当前的 venv 不起作用 我想我需要重新创建 venv 安装了 python3 10 venv 但我无法获取并激活它 事实上
  • Apache Spark:map、flatMap、mapPartitions、mapPartitionsWithIndex 的比较

    Apache Spark map flatMap mapPartitions mapPartitionsWithIndex 的比较 欢迎提出建议 以提高我们的知识 地图 函数 它有什么作用 通过提供的函数传递 RDD 的每个元素 即功能 平
  • 优化运行时间:改变igraph中边的权重需要很长时间。有没有办法优化它?

    我正在从 osmar 对象构建的 igraph 中搜索一组边 并希望更改这些边的权重 由于我的图表很大 因此这项任务需要很长时间 由于我在循环中运行此函数 因此运行时间变得更大 有什么办法可以优化这个吗 这是代码 library osmar
  • 使用后如何从 GPU 清理和卸载 WebGL 画布上下文?

    如何清理 WebGL 上下文程序并从 GPU 和 dom element 卸载程序 缓冲区和所有内容 我想确保我们没有乱扔垃圾 另外 如果可能的话 重用画布会很好 而且我不知道是否会这样 2d or webgl语境 您可以丢失对 gl 上下
  • 在 C# 中从 Msi 中的自定义操作强制重新启动

    我们如何在 C 自定义操作中提示安装后重新启动计算机 我们使用 VS 2005 的安装项目进行安装 并且需要以编程方式决定提示重新启动 因此不会在每次安装时发生 只是在某些安装上发生 更新 我们首先正在寻找已经内置于 MSI 自定义操作系统