【问题标题】:Deploying C# application with UAC使用 UAC 部署 C# 应用程序
【发布时间】:2011-02-14 15:47:39
【问题描述】:

我们正在创建一个 C# .net 应用程序,它使用在 C++。它还需要由第三方开发的一些用户控件 (与应用程序捆绑为 .dll。)如果我们在 启用 UAC 的机器,它按预期执行。然而,如果我们 使用通过 Visual Studio 部署创建的安装程序进行部署 项目,它崩溃了。如果安装的可执行文件是“运行方式 管理员”它有效。 此外,如果将需要管理员权限的清单添加到 安装后它运行良好的 C# 可执行文件,但是 UAC 要求 每次运行可执行文件时获得许可。 有什么东西可以指定为始终以管理员身份运行 无需每次都弹出 UAC 或安装程序更改了此类 安装后不需要管理员权限即可运行 (因为应用程序如果在没有安装的情况下运行不需要管理员 特权)?

【问题讨论】:

  • 如果您以管理员身份运行并且 UAC 已打开,则无法阻止 UAC 弹出,因为这会破坏 UAC 的目的。
  • 我同意它不应该是这种情况,但是我的意思是,如果一旦获得许可,那么有没有办法让它记住它是一个可信任的可执行文件?

标签: c# .net c++ deployment uac


【解决方案1】:

显然,如果没有 UAC 提示,您将无法以管理员身份运行。这会让恶意软件编写者的生活变得太容易了。

我怀疑它的安装位置很重要。通常它位于 \Program Files\ 下,这也是它的默认工作目录。但是,在非管理员帐户下运行时,该程序可能不会在那里写入。 DLL 是否有可能尝试写入当前工作目录?

【讨论】:

  • 我认为这解决了它。一旦我将日志记录删除到文件中,应用程序就不会崩溃,现在可以正常工作。感谢您的帮助。
【解决方案2】:

其实是有解决办法的。将需要提升到 Windows 服务的代码驱逐出境。然后,您的应用可以调用您的服务以运行提升的命令(使用 WCF、RPC、远程处理或任何您想要的)。

但你必须小心:

  • 这可能是一个安全漏洞,因为非提升的程序可能会要求提升的程序来完成这项工作。如果您的应用包含错误或数据检查不足,则可能很危险。
  • 您的服务将始终运行
  • 您的服务将以特定用户身份或内置用户身份运行。该过程不会获得登录用户的身份。我认为没有 UAC,委派将无法工作。

【讨论】:

  • 程序本身不需要管理员权限,只有安装后才会出现此问题
【解决方案3】:

正如已经回答的那样,如果在应用的清单中请求管理员权限,则在应用启动期间无法绕过 UAC 提示。

不过,您可以使用一种解决方法:在安装期间,为每个人设置日志文件或文件夹的写入权限。

请注意,这不是一个“干净”的解决方案。相反,您应该更改 DLL 的代码以在其他地方记录。

【讨论】:

    猜你喜欢
    • 2017-09-10
    • 2011-10-05
    • 1970-01-01
    • 2012-04-09
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多