2013-03-13 211 views
8

我有一个控制台应用程序,它是由erp软件调用开发的。如何使控制台应用程序始终以管理员身份运行?

他们在erp内部调用我的应用程序,当他们这样做时,我总是得到与没有足够权限执行相关的错误。

我已经检查了“运行这个程序作为管理员”复选框的所有用户的EXE的属性,但结果是一样的。

我读过一些关于增加一个清单,这将使UAC对话框的应用程序的提示,但是那不是我想要的,因为应用程序会从服务器和客户机上ERP被称为将看不到服务器的对话框。

有人可以解释我如何使这个控制台应用程序始终以管理员身份运行?

+0

为什么此控制台程序需要管理权限? – 2013-03-13 18:26:39

回答

7

第一,明白在这个过程中会有一个UAC对话框。没有办法避免它。有几种方法可以采用:

  • 让人们运行ERP软件提升。我只是为了完整而包括这个。当您通常不需要权限时,每次运行应用程序时必须同意UAC提示是非常可怕的。不过,这将是一个方便的快速测试,因为您可以确认,如果您的应用程序升级,那么事情就会起作用。从升级过程中启动的所有内容都会提升,因此如果您的应用仍然收到错误消息,则不会通过提升来解决此问题。
  • 更改ERP应用程序中的代码以启动您的应用程序。你提到C#。用runas动词发起是一种方法。这给ERP开发人员带来了负担,他们可能无法做到这一点。
  • 将清单添加到您的应用程序。您可以嵌入一个,或者如果您的应用程序被称为foo.exe,只需用适当的requestedExecutionLevel手动创建一个foo.exe.manifest文件即可。要嵌入一个,使用C#项目的Properties页面来选择正确的清单。确保将UseShellExecute设置为true,否则清单将被忽略。

如果您选择第一个选项,每次启动ERP应用程序时都会出现UAC提示。不好。如果您选择第二个或第三个,则每次从ERP应用程序启动您的控制台应用程序时,都会提示UAC提示。可能是可以接受的。

你可能会考虑的另一件事是更加关注为什么控制台应用程序需要管理员权限。你在写C或者Program Files的根目录吗?你在更新HKLM中的注册表项吗?无论你在做什么,你为什么这样做?除非您的应用程序安装或配置了某些东西(在这种情况下,获得UAC提示是否合适),您应该尝试对其进行调整,以便将其写入预先存储的用户并且不需要提升。那么在任何情况下,你将不再担心如何升高它。

+3

“你可能会考虑的另一件事是更加关注为什么控制台应用程序需要管理员权限。”说得好。这正是恰当的问题。 – 2013-03-13 19:13:22

+0

weel我将x509证书添加到Windows Store中,从商店中读取证书,访问数据库并连接到外部Web服务。是否必须拥有管理权限? – Marco 2013-03-14 09:42:25

+0

我还使用EventLog.WriteEntry()在事件查看器上记录错误。所以我认为我真的需要管理员权限。对? – Marco 2013-03-14 10:09:06

0

创建一个包含类似的批处理文件:

runas /env /user:%USERDOMAIN%\%USERNAME% cmd.exe /K YourProgramName.exe 

其中,%USERDOMAIN%和%USERNAME%是由您的管理员帐户的细节所取代。

然后运行它?

+0

这将以该用户身份运行该应用,但不会将该会话提升为管理员的会话,即使该用户拥有管理权限 – War 2016-12-09 17:07:13

22

添加到您的项目应用程序清单文件(添加 - >新建项目 - >常规 - >应用程序清单文件),并添加下面的节点进入app.manifest:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

http://msdn.microsoft.com/en-us/library/windows/desktop/bb756929.aspx

+0

优秀的修复方法,谢谢 – Linef4ult 2015-11-28 16:57:36

+0

这应该是答案,更直接简单。 – 2017-05-09 06:17:50

相关问题