Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使控制台应用始终以管理员身份运行?_C#_Console Application_Uac_Runas_Elevated Privileges - Fatal编程技术网

C# 如何使控制台应用始终以管理员身份运行?

C# 如何使控制台应用始终以管理员身份运行?,c#,console-application,uac,runas,elevated-privileges,C#,Console Application,Uac,Runas,Elevated Privileges,我有一个控制台应用程序,它是为erp软件开发的 他们在erp中调用我的应用程序,当他们这样做时,我总是收到与权限不足相关的错误 我在所有用户的exe属性中选中了“以管理员身份运行此程序”复选框,但结果相同 我读过一些关于添加清单的内容,该清单将使应用程序提示uac对话框,但这不是我想要的,因为应用程序将从服务器上的erp调用,客户端将看不到服务器上的对话框 有人能告诉我如何让这个控制台应用程序始终以管理员身份运行吗?创建一个包含以下内容的批处理文件: runas /env /user:%USER

我有一个控制台应用程序,它是为erp软件开发的

他们在erp中调用我的应用程序,当他们这样做时,我总是收到与权限不足相关的错误

我在所有用户的exe属性中选中了“以管理员身份运行此程序”复选框,但结果相同

我读过一些关于添加清单的内容,该清单将使应用程序提示uac对话框,但这不是我想要的,因为应用程序将从服务器上的erp调用,客户端将看不到服务器上的对话框


有人能告诉我如何让这个控制台应用程序始终以管理员身份运行吗?

创建一个包含以下内容的批处理文件:

runas /env /user:%USERDOMAIN%\%USERNAME% cmd.exe /K YourProgramName.exe
其中%USERDOMAIN%和%USERNAME%被您的管理员帐户详细信息替换


然后运行它?

添加到您的项目应用程序清单文件中(添加->新项目->常规->应用程序清单文件),并将以下节点添加到app.Manifest中:

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


首先,要了解在这个过程中的某个时候会出现UAC对话框。这是无法避免的。您可以采取以下几种方法:

  • 让人员运行ERP软件。我包括这只是为了完整性。在通常不需要电源的情况下,每次运行应用程序时都必须同意UAC提示,这是非常糟糕的。不过,这将是一个方便快捷的测试,你可以确认如果你的应用程序升级,一切都会正常工作。从提升的进程启动的所有内容都会提升,因此,如果您的应用程序仍然收到错误消息,那么您将无法通过提升来修复此问题
  • 更改ERP应用程序中的代码以启动应用程序。你提到C。使用
    runas
    动词启动是一种方法。这给ERP开发人员带来了负担,他们可能无法做到这一点
  • 向应用程序添加清单。您可以嵌入一个,或者如果您的应用程序名为foo.exe,只需手动创建一个具有适当requestedExecutionLevel的foo.exe.manifest文件。要嵌入清单,请使用C#项目的属性页面选择正确的清单类型。确保启动时将
    UseShellExecute
    设置为true,否则将忽略清单
如果选择第一个选项,则每次启动ERP应用程序时都会显示UAC提示。不好的。如果选择第二个或第三个,则每次从ERP应用程序启动console应用程序时都会出现UAC提示。可能可以接受


你可以考虑的另一件事是更严肃地思考为什么控制台应用程序需要管理员私有。您是在写C的根目录还是程序文件?您是否正在更新HKLM中的注册表项?不管你在做什么,你为什么要这样做?除非您的应用程序安装或配置了某些东西(在这种情况下,获得UAC提示是好的和正确的),否则您应该尝试对其进行调整,使其写入预用户存储,而不需要升级。那么,你将不再担心如何启动它,无论如何。

为什么这个控制台程序需要管理特权?“你可以考虑的另一件事是更严肃地看待为什么控制台应用程序需要管理员私有。”这正是我要问的正确问题。weel我正在将x509证书添加到windows应用商店,从应用商店读取证书,访问数据库并连接到外部Web服务。这是否是具有管理权限所必需的?我还使用EventLog.WriteEntry()在事件查看器上记录错误。所以我想我真的需要管理员权限。对吗?访问数据库、连接到Web服务以及写入事件日志绝对不需要管理员权限。第一次创建事件日志会导致错误。不确定证书,但值得一看,写入事件日志需要提升的权限。我已经删除了这行代码,现在我将日志直接写入数据库。现在它正在工作。谢谢你告诉我正确的方向。这将运行该应用程序作为用户,但不会提高会话的管理员,即使用户有行政权这应该是答案,更直接和简单。什么是等价的C++?对于C++控制台应用程序,我找不到这个“代码>应用程序清单文件< /代码>项。