1

我有一个批处理文件“install.bat”存储在位置“

c:\用户\abc\xyz

“。我想在管理模式下执行这个批处理文件

C:\Windows\System32

使用 System() API 的文件夹。任何人都可以让我知道如何以编程方式实现这个 VC++。

我的代码片段::

int ret = System("c:\Users\abc\xyz\install.bat");

如果我给出这个命令,批处理文件当然是从“c:\Users\abc\xyz”文件夹执行的。但我想从 System32 文件夹运行这个批处理文件?

提前致谢。

4

3 回答 3

3

一种选择是将cd命令作为 .bat 文件的第一行。您可以更改调用进程的工作目录,但这是用锤子敲碎的。

如果您远离该system功能,您可以调用CreateProcess. 这允许您在创建新流程时指定所需的所有细节。您需要运行命令解释器(通过读取COMSPEC环境变量来查找)。您可以将新进程的工作目录指定为CreateProcess.

CreateProcess虽然很难打电话。它不会帮助您请求提升管理员权限。相反,您可以使用ShellExecute. 将动词称为传递"runas",这将导致提升。

ShellExecute(0, "runas", "c:\\Users\\abc\\xyz\\install.bat", NULL, 
    "C:\\Windows\\System32", SW_SHOW);
于 2013-01-31T19:05:51.317 回答
2

您需要使用ShellExecute

类似于以下内容

ShellExecute(hwnd, "runas", "c:\\Users\\abc\\xyz\\install.bat", NULL, "c:\\windows\\system", SW_SHOWNORMAL );
于 2013-01-31T19:07:14.097 回答
0

不使用 System(),您可以只cd到包含.bat文件的位置并调用批处理文件

于 2013-01-31T19:11:41.283 回答