5

Windows 8.1 带有一个名为“SlideToShutdown”的功能。我正在尝试以编程方式调用该可执行文件。Process.Start();我在 C#、Shell()VB 和C 中尝试过(void)system();

它说错误为'C:\Windows\System32\SlideToShutdown.exe' is not recognized as an internal or external command, operable program or batch file.

但是在我执行时在命令提示符下start C:\windows\system32\slidetoshutdown.exe它工作得很好。

在此处输入图像描述

这是我的 C 程序(名为 ac)来调用它

#include <stdlib.h>
#include <stdio.h>
int main()
{
    (void)system("C:\\Windows\\System32\\SlideToShutDown.exe");
    return(0);
}

请帮我。

4

3 回答 3

1

您可能使用的是 64 位版本的 Windows。但是,您的程序是一个 32 位进程。它受到文件系统重定向的影响,它实际上会在 c:\windows\syswow64 目录中查找程序。32 位可执行文件的主目录。它不存在的地方。

解决方法是使用c:\windows\sysnative\slidetoshutdown.exe. 对于 32 位进程,目录名称的“sysnative”部分将映射到 system32。从技术上讲,您还应该查找主目录,它不一定是 c:\windows。GetWindowsDirectory() 函数。

如果您在托管项目中执行此操作,则只需更改项目 + 属性、构建选项卡、平台目标设置。支持 AnyCPU,关闭 VS2012 及更高版本的“首选 32 位”选项。这将使您的程序作为 64 位进程运行,因此不会被重定向。现在只需 Process.Start("slidetoshutdown.exe") 就可以了。创建 64 位 C 程序也不难,只需将目标平台更改为 x64 即可。

于 2013-07-16T12:39:33.163 回答
0

你可能已经尝试过了,无论如何我建议:

system("start C:\\windows\\system32\\slidetoshutdown.exe");

?

于 2013-07-16T09:49:37.590 回答
0

尝试关注

System.Diagnostics.Process.Start("start","C:\\windows\\system32\\slidetoshutdown.exe")
于 2013-07-16T10:10:16.747 回答