【问题标题】:32/64 bits Issue with psr.exepsr.exe 的 32/64 位问题
【发布时间】:2017-02-03 19:46:52
【问题描述】:

我目前遇到了 psr.exe 的问题。实际上,它与以下命令完美配合:

  • C:\windows\system32\psr.exe
  • C:\windows\syswow64\psr.exe
  • psr.exe(带有 system32\cmd.exe 和 syswow64\cmd.exe)。

但是,当我的程序(在 64 位 Windows 7 上运行的 32 位程序)使用此 bat 启动应用程序时,它不起作用。什么都没发生。 我的程序可以从 bat 文件中打开记事本,或者执行任何你想要的,但它不适用于 psr.exe。

你能给我一些建议吗?也许这不是 32/64 位兼容性问题,但我不知道为什么这不起作用...

编辑: 批处理文件内容为: C:\windows\system32\psr.exe

运行这个bat的程序是用C编写的,它使用这个函数来启动它:

CreateProcessAsUser(
    hTokenDup,
    NULL,
    "C:\\toto\\mybat.bat",
    NULL,
    NULL,
    FALSE,
    NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE,
    lpEnvironment,
    NULL,
    &sInfo,
    &ProcessInfo)

如果 .bat 文件包含 C:\windows\system32\notepad.exe 而不是 C:\windows\system32\psr.exe,它会完美运行。

如果我从桌面双击包含C:\windows\system32\psr.exe 的 bat 文件,它可以正常工作,但在我的 C 程序中,它就不能工作。

(注意:我的 c 程序适用于其他 .exe 文件,例如记事本)

非常感谢。

约翰

【问题讨论】:

  • 能否添加批处理文件的代码。
  • 对你来说够了吗:)?
  • 信息已经足够了,但我无法弄清楚为什么它不能像我在 java 中那样工作
  • 我公司的某个人在我的公司工作 C,他说 C 可能会在 64 位和 32 位问题上失败
  • 哦,谢谢。告诉他 Windows 事件报告了这个:Un périphérique ou program a requis l'attention。 Périphérique 或应用程序:C:\windows\SysWOW64\cmd.exe。消息名称:C:\windows\system32\cmd.exe。对不起法语....

标签: c batch-file cmd 32bit-64bit


【解决方案1】:

如果在 64 位 Windows 操作系统上运行的 32 位程序尝试访问文件 C:\windows\system32\psr.exe,Windows 会将请求重定向到文件 C:\windows\syswow64\psr.exe。

要从 32 位环境启动 64 位系统应用程序,您需要执行 C:\windows\sysnative\psr.exe,它将被重定向到“真实”C:\windows\system32\psr.exe。

要完全在 64 位环境中运行 bat 文件,请使用以下参数执行 C:\windows\sysnative\cmd.exe:/c "C:\toto\mybat.bat"

但是,在您的情况下,这似乎不是问题。

您尝试模拟的用户是否具有损坏的配置文件、主文件夹、环境,或者没有psr.exe 应用程序所需的某种权限?

或者,也许应用程序需要加载用户配置文件,但您没有通过事先调用 LoadUserProfile() 来加载它?

尝试通过运行您的批处理文件进行测试,如下所示:

c:\windows\syswow64\runas.exe /noprofile /env /user:INSERT_USERNAME_HERE "C:\toto\mybat.bat"

有效吗?现在尝试删除/env 和/或将/noprofile 替换为/profile。现在可以了吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-12
    • 2011-10-27
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2019-06-13
    • 2019-08-19
    • 2011-07-20
    相关资源
    最近更新 更多