【问题标题】:Run System( ) CMD commands with Admin rights以管理员权限运行 System( ) CMD 命令
【发布时间】:2016-02-21 00:29:39
【问题描述】:

我正在尝试找到一种方法,在我的 C++ 代码中以管理员身份运行 CMD 命令。

即:

system("taskkill /im mygame.exe");

这不起作用,它会弹出“错误:访问被拒绝”消息。 如果我以管理员身份运行 Windows CMD 并直接执行相同的命令,它将完美运行。

那么在 C++ 中自动使用 CMD 作为管理员的方法是什么?

我在这里阅读了一些其他主题,但我无法直接关联/从中获得任何信息。

非常感谢示例。

【问题讨论】:

  • 在 Windows 中不太确定,但我想您需要以管理员权限运行您的应用程序,试试看?
  • @MrEricSir 我看不出该线程与我的问题有什么关系/会解决我的问题,可能是因为我是 C++ 新手,需要一个更简单的答案,与我的具体情况或关于该主题的其他见解。
  • 我们可能会注意到另一个问题不是重复的;他需要提升一些不是为了提升而表现出来的东西。

标签: c++ c++11


【解决方案1】:

正确的答案是通过使用 requireAdministrator 显示的辅助 EXE 启动。

您的帮助程序显示:

#include <process.h>
int main(int argc, char **argv, char **env) {
    return _spawnve(_P_WAIT, argv[1], argv + 1, env);
}

您将无法使用 CreateProcess 或 system() 启动您自己的子进程。您必须使用以下命令启动帮助程序:

ShellExecute(hwnd, "helper.exe", "whatever you were going to pass to system()", NULL, NULL, 0);

其中 hwnd 是您拥有的某个窗口(如果您没有可见窗口,则传递 NULL)。

参考1:How do I force my .NET application to run as administrator?

Ref2:https://msdn.microsoft.com/en-us/library/bb756929.aspx

参考 3:https://msdn.microsoft.com/en-us/library/windows/desktop/bb776886%28v=vs.85%29.aspx

【讨论】:

  • 我实际上对您刚刚编写的代码一无所知(正如我所说,我对此基本上是新手)但我确实找到了一种更简单的方法(以防万一有人在未来)。在 Visual Studio C++ 中,转到项目 > 项目属性 > 链接器 > 清单文件 > 并将 UAC 管理级别设置为 > 需要管理。这将在您每次打开 .exe 文件时要求管理员权限(并以管理员身份执行 System( ) 命令。
  • 这当然有效,但不是问的问题。不过,去吧。
【解决方案2】:

通常的方法是使用runas:

system("runas /user:Administrator@domain \"taskkill /im mygame.exe\"");

【讨论】:

  • @ChrisDood 嗨,很遗憾,这行不通。即使程序要求我输入管理员密码,之后它仍然会显示相同的错误(拒绝访问)。
猜你喜欢
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 2022-08-20
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 2013-03-07
相关资源
最近更新 更多