我有一个控制台应用程序,它被开发为由 erp 软件调用。
他们在 erp 中调用我的应用程序,当他们这样做时,我总是收到与权限不足相关的错误。
我已经为所有用户检查了 exe 属性中的“以管理员身份运行此程序”复选框,但结果是相同的。
我已经阅读了有关添加清单的内容,该清单将使应用程序提示 uac 对话框,但这不是我想要的,因为将从服务器上的 erp 调用应用程序,而客户端将看不到服务器上的对话框。
有人可以解释一下如何让这个控制台应用程序始终以管理员身份运行吗?
我有一个控制台应用程序,它被开发为由 erp 软件调用。
他们在 erp 中调用我的应用程序,当他们这样做时,我总是收到与权限不足相关的错误。
我已经为所有用户检查了 exe 属性中的“以管理员身份运行此程序”复选框,但结果是相同的。
我已经阅读了有关添加清单的内容,该清单将使应用程序提示 uac 对话框,但这不是我想要的,因为将从服务器上的 erp 调用应用程序,而客户端将看不到服务器上的对话框。
有人可以解释一下如何让这个控制台应用程序始终以管理员身份运行吗?
添加到您的项目应用程序清单文件(添加 -> 新项目 -> 常规 -> 应用程序清单文件)并将以下节点添加到 app.manifest 中:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
http://msdn.microsoft.com/en-us/library/windows/desktop/bb756929.aspx
首先,了解在此过程中的某个时间点会有一个 UAC 对话。没有办法避免它。您可以采取以下几种方法:
runas
动词启动是这里的一种方法。这给 ERP 开发人员带来了负担,他们可能无法做到。UseShellExecute
设置为 true,否则清单将被忽略。如果您选择第一个选项,则每次启动 ERP 应用程序时都会出现 UAC 提示。不好。如果选择第二个或第三个,则每次从 ERP 应用程序启动控制台应用程序时都会出现 UAC 提示。大概可以接受。
您可能会考虑的另一件事是更认真地研究为什么控制台应用程序需要管理员权限。你是写到 C 的根目录还是写到 Program Files?您是否正在更新 HKLM 中的注册表项?不管你在做什么,你为什么要那样做?除非您的应用程序安装或配置了某些东西(在这种情况下获得 UAC 提示是好的且正确的),否则您应该尝试对其进行调整,以便它写入用户前存储并且不需要提升。无论如何,您将不再担心如何提升它。
创建一个包含以下内容的批处理文件:
runas /env /user:%USERDOMAIN%\%USERNAME% cmd.exe /K YourProgramName.exe
其中 %USERDOMAIN% 和 %USERNAME% 将替换为您的管理员帐户详细信息。
而是运行它?