【问题标题】:A specific exe file can not be called programmatically无法以编程方式调用特定的 exe 文件
【发布时间】:2013-07-16 20:39:33
【问题描述】:

Windows 8.1 带有一个名为“SlideToShutdown”的功能。我正在尝试以编程方式调用该可执行文件。我在 C# 中尝试了 Process.Start();,在 VB 中尝试了 Shell(),在 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 程序(名为 a.c)来调用它

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

请帮帮我。

【问题讨论】:

  • 标签是怎么回事?这看起来像 C。
  • @dandan78 OP 尝试了 C#、VB.NET 和 C。他可能想要使用任何这些语言的解决方案。
  • @Stijn,启动记事本,mspaint 工作正常。但只有那个特定的 exe 文件不起作用。请仔细阅读标题“不能以编程方式调用特定的 exe 文件”
  • 放松,不用大喊大叫。
  • Win8.1上有人可以确认一下吗?太奇怪了。另外,也许您可​​以尝试使用 PE 编辑器查看它是否是有效的可执行文件?

标签: c# c vb.net windows-8.1


【解决方案1】:

您可能使用的是 64 位版本的 Windows。但是,您的程序是一个 32 位进程。它受制于file system redirection,它实际上会在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 即可。

【讨论】:

    【解决方案2】:

    尝试关注

    System.Diagnostics.Process.Start("start","C:\\windows\\system32\\slidetoshutdown.exe")
    

    【讨论】:

    • 这看起来很丑:D
    【解决方案3】:

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

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

    ?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多