2011-02-14 247 views
1

我们正在创建一个C#.net应用程序,该应用程序使用在 C++中开发的.dll文件。它还需要一些由第三方开发的用户控件 (与应用程序捆绑为.dll)。如果我们在 上运行此应用程序,则启用UAC的计算机将按预期执行。但是,如果我们 使用通过Visual Studio部署 项目创建的安装程序进行部署,它会崩溃。如果安装的可执行文件是“作为 管理员”运行。 另外,如果需要管理员权限的清单被添加到 C#可执行文件,它会在安装后正常运行,但是UAC每次运行可执行文件时都会询问 。 是否有东西可以指定始终作为管理员运行 而不必每次都弹出UAC或安装程序更改了这样的 它不需要管理员权限在安装后运行 (因为如果在没有安装的情况下运行应用程序不需要管理员 privilleges)?使用UAC部署C#应用程序

+0

如果您以管理员身份运行并启用UAC,则无法阻止UAC弹出,因为这会挫败UAC的用途。 – AndrewC 2011-02-14 15:56:34

+0

我同意不应该这样,但是我的意思是,如果获得一次许可,那么是否有办法让它记住它是可信的可执行文件? – quake 2011-02-14 16:06:39

回答

3

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

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

+0

是的,.dll写入日志文件。 – quake 2011-02-14 16:07:32

0

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

但是你必须要小心:

  • 它可以是一个安全漏洞,因为非高架程序可能要求升高一个做的工作。如果您的应用程序包含错误或没有足够的数据检查,可能会很危险。
  • 您的服务将始终运行
  • 您的服务将以特定的用户身份或内建运行。该进程将无法获得登录用户的身份。如果没有UAC,我认为代表团不会工作。
0

如已回答的,如果应用程序清单中请求管理员权限,则应用程序启动期间无法解决UAC提示。

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

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