我目前遇到psr.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文件,例如记事本)
非常感谢。
约翰
答案 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
。现在吗?