当 UAC 被拒绝时 Process.Start 永远不会返回

2023-11-21

我有一个更新程序 exe,旨在关闭主 exe,将其替换为更新的 exe,然后启动该更新的 exe。当更新程序尝试启动更新的 exe 时,如果用户拒绝 UAC 权限对话框,更新程序将挂起。这是因为Process.Start()函数永远不会返回。顺便说一句,我的 CPU 周期表显示几乎没有使用。

我希望我的所有用户都对 UAC 说“是”,但既然我在这里,我想至少用某种错误消息来处理这种情况。假设我的用户至少拥有 Windows 7。exe 本身是 32 位 Winforms 应用程序。目标 .Net Framework 是 4.0。使用 Visual Studio 2010 旗舰版。

关于如何检测我的用户拒绝 UAC 对话框的任何想法?

我想我能做的就是让Process.Start()在一个单独的线程上运行,一段时间后就会超时。更多代码:

private void RestartProcess()
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.FileName = @"C:\Users\Me\Documents\Visual Studio 2010\Projects\updated.exe";
    MessageBox.Show("Attempting to start process");
    Process newProc = Process.Start(startInfo);
    MessageBox.Show("If this shows, the user has clicked YES in the UAC.");
}

解决方案:

Process.Start()除非使用 Try{}Catch{} 块来捕获错误,否则会以 Win32Exception 静默退出。


   Process newProc = Process.Start(startInfo);
   MessageBox.Show("If this shows, the user has clicked YES in the UAC.");

这是正常的,由 Process.Start() 引发的异常将绕过 MessageBox.Show() 调用。它是 Windows 的 Win32Exception 错误代码 1223、ERROR_CANCELLED、“操作已被用户取消”。

显然你会想避免在这里吞掉异常。

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

当 UAC 被拒绝时 Process.Start 永远不会返回 的相关文章

  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 按成员序列化

    我已经实现了template
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 重载<<的返回值

    include
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le

随机推荐

  • Angular ui-router 完成条件视图

    我正在问一个与这个问题类似的问题 UI 路由器条件 ui 视图 但我的情况有点复杂 我似乎无法得到所提供的工作答案 基本上 我有一个 url 可以用两种截然不同的方式呈现 具体取决于 url 指向的实体类型 这是我目前正在尝试的 state
  • 鼠标中键按下并移动事件

    是什么控制事件鼠标中键按下并移动 也就是说 当我按住鼠标中键并移动鼠标时 我可以订阅什么事件 看一下 Control MouseDown 事件 鼠标按钮枚举 在 C 中检测鼠标按钮事件 你也可以尝试这样的事情 private void Fo
  • 使用 Redis 的 Mule 缓存策略

    我正在寻找一种在两台服务器之间共享缓存的方法 并且正在研究使用 Redis 作为对象存储缓存策略 但在读取存储值时遇到问题 当缓存命中为未命中值时 它会成功存储值 但在检索该值时会抛出错误 所需的对象 属性 muleContext 为 nu
  • 如何在 ext 4 中制作完整的模式窗口?

    就像微软操作系统 xp vista 7 等 中的窗口一样 如果主窗口创建模态窗口 则用户无法访问主窗口 包括关闭和访问工具栏等 我想用 extjs 做一个类似的 这是我的模态示例 Ext create Ext Window title aa
  • 类型存在于 2 个程序集中

    我从两个不同的第三方 COM DLL 创建了两个 NET Interop 程序集 这两个 COM DLL 都包含一个名为COMMONTYPE 所以 COMMONTYPE现在也通过两个互操作程序集公开 我有第三个项目需要使用这两个互操作程序集
  • jce 无法验证提供者 bc

    我开发了一个应用程序 在 BountyCastle jar 的帮助下使用了密码学 我还有一行 Security addProvider new org bouncycastle jce provider BouncyCastleProvid
  • 在两个无序字符向量之间执行非成对的全部比较 --- intersect 的相反 --- 全部到全部 setdiff

    示例数据 v1 lt c E82391 X2329323 C239923 E1211 N23932 F93249232 X93201 X9023111 O92311 9000F K9232932 L9232932 X02311111 v2
  • Object类如何实现clone()方法

    在一本关于 Core Java 的书中 我发现了这样的摘录 想想以何种方式 对象类可以实现克隆 它 对物体一无所知 所以它只能逐个字段 复制 如果对象中的所有数据字段 是数字或其他基本类型 复制字段就可以了 但 如果该对象包含对 子对象 然
  • 在调用超类构造函数之前验证构造函数的参数

    例如 这样的构造函数 public class Car extends Vehicle public Car Car a super a getName what if a is null 在调用 super 之前我无法检查参数的条件 在这
  • 用自定义的任务计划程序替换 C# 中的任务计划程序

    我想知道是否可以使用 C 更改将任务映射到 NET 中真实操作系统线程的任务调度程序 或者是否需要重新编译 Mono 运行时来执行此操作 谢谢 系统 线程 任务 如果您参考系统 线程 任务那么你需要的是子类化任务调度器然后你可以使用你的类的
  • 参数类型“customClass.Type”不符合预期类型“NSItemProviderWriting”

    iOS 11 x 斯威夫特 4 尝试实现自定义类以使用新的拖放协议 并且需要一些超级编码器的帮助 我创建了这个类 import UIKit import MobileCoreServices class CustomClass NSObje
  • PHP 的 mail():有哪些需要注意的潜在问题?

    给定接受自定义用户输入 例如地址 主题行 消息 的联系表单 需要注意哪些安全隐患和 陷阱 至少 必须验证用户的电子邮件地址 可能使用 filter var 或等效函数 根据我的阅读 这还应该防止将额外的标头注入到脚本中 那么主题行和消息内容
  • angular-cli工具的--base-href和--deploy-url参数有什么区别

    Angular 的文档告诉我们应该使用 base href当要部署在子文件夹中时 Angular 应用程序构建用于生产时的参数 如果将文件复制到服务器子文件夹中 请附加构建标志 base href并设置适当地 例如 如果index html
  • golang 中 C++ 的“using”等价物是什么

    什么是C using some namespace objectgolang 中的等价物 根据问题here我可以得到using namespace common附有以下声明 import common 但这会导入整个命名空间 现在我只想使用
  • force_ssl 在 Rails 中做什么?

    在之前的一个question我发现我应该设置 nginx ssl 终止并且不让 Rails 处理加密数据 那么为什么会出现下面的情况呢 config force ssl true 我在生产配置文件中看到这一点被注释掉了 但是 如果期望 ng
  • PyInstaller 打包的应用程序在控制台模式下工作正常,在窗口模式下崩溃

    我正在使用 Python 和 PySide 构建一个相当复杂的应用程序 发布的日子终于临近了 所以我想将此应用程序构建为 exe 然而 我手上有一个奇怪的问题 我过去使用过 PyInstaller 顺便说一下 使用版本 2 但从未发生过这种
  • 如何以编程方式编译和实例化 Java 类?

    我将类名存储在属性文件中 我知道类存储将实现 IDynamicLoad 如何动态实例化该类 现在我有 Properties foo new Properties foo load new FileInputStream new File C
  • 在 Subversion 中替换整个目录树的最佳方法?

    在我的 Subversion 项目中 我有一些目录 其中包含我的代码所需的其他开源项目 例如 ffmpeg freetype matrixssl 和其他一些 更新 SVN 以保存这些项目之一的最新版本的最佳方法是什么 本质上我将执行以下操作
  • 什么机制允许 ViM 暂时覆盖整个控制台?

    当你进入vim 它 清除 屏幕 退出后 它会 恢复 原始内容 我知道可以使用 x1b 2J清除控制台并重置光标位置 但这将覆盖终端内容 我假设 Vim 使用ncurses在幕后 我想更好的问题是 ncurses 如何做到这一点 但它是如何完
  • 当 UAC 被拒绝时 Process.Start 永远不会返回

    我有一个更新程序 exe 旨在关闭主 exe 将其替换为更新的 exe 然后启动该更新的 exe 当更新程序尝试启动更新的 exe 时 如果用户拒绝 UAC 权限对话框 更新程序将挂起 这是因为Process Start 函数永远不会返回