【问题标题】:Under Windows 7 and 8, openfiles.exe cannot be launched by another application在 Windows 7 和 8 下,openfiles.exe 无法由其他应用程序启动
【发布时间】:2013-12-26 22:02:44
【问题描述】:

如果我使用 C++ Windows API“CreateProcess”或 C 运行时库“system”来启动大多数进程,它们运行良好。但是,如果我在 Windows 7 和 8 下使用相同的方式启动 openfiles.exe,就像在“openfiles.exe /query”中一样,它永远不会起作用。它抱怨需要运行 32 位操作系统,或者,如果我使用 runas 提升它,我会得到 Invalid Function。在 Win 7 和 8 下 openfiles.exe 肯定有一些特殊之处,尽管它在命令提示符下运行良好,但在由另一个进程启动时它永远不会运行。为什么?

【问题讨论】:

  • 我怀疑这是 32 位与 64 位可执行文件的问题。 IIRC,即使在 64 位系统上,openfiles.exe 也是 32 位 exe。查看 CreateProcess 标志并确保您为 32/64 位上下文做正确的事情。
  • 这是您尝试在 64 位操作系统上运行 16 位程序时遇到的错误类型。在您的机器上查找名为“openfiles.com”的文件。
  • Win 7 32位下问题依旧。错误消息是一条红鲱鱼。
  • 从 Win 7 开始,微软似乎已限制从其他应用程序启动 openfiles.exe。在命令提示符下,一切正常,但其他任何事情都是“不行”。似乎它在启动时正在查看进程链,如果链不是必需的则不运行。

标签: c++ windows winapi c++builder


【解决方案1】:

似乎在 Windows 64 位下,应用程序必须也是 64 位的(对于 32 位操作系统不确定)。

我的系统是 Windows 7 64 位,如果我构建我的应用程序时将“目标平台”设置为“64 位 Windows”,则以下工作正常。

::ShellExecuteW( this->Handle, NULL, L"openfiles.exe", L"/query", NULL, SW_SHOWNORMAL );

我相信其他启动选项也可以像 CreateProcess 一样工作。

但是在构建为 32 位应用程序时会出现与您相同的错误。

【讨论】:

    猜你喜欢
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多