32/64位psr.exe问题

时间:2016-09-26 12:48:23

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

我目前遇到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文件,例如记事本)

非常感谢。

约翰

1 个答案:

答案 0 :(得分:0)

如果在64位Windows OS上运行的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。现在吗?