使用UAC部署C#应用程序

时间:2011-02-14 15:47:40

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

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

实际上有一个解决方案。将需要提升的代码驱逐到Windows服务。然后,您的应用程序可以调用您的服务来运行提升的命令(使用WCF,RPC,远程处理或任何您想要的任何内容)。

但你必须小心:

  • 它可能是一个安全漏洞,因为非升级程序可能会要求升级程序执行该作业。如果您的应用包含错误或数据检查不足,则可能存在危险。
  • 您的服务将始终运行
  • 您的服务将使用特定的用户身份或内置版运行。该过程不会获得已记录用户的身份。我认为如果没有UAC,代表团将无法工作。

答案 2 :(得分:0)

如前所述,如果在应用程序清单中请求管理员权限,则在应用程序启动期间无法绕过UAC提示符。

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

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