我正在使用需要以域用户身份运行的业务线应用程序。虽然计算机已加入域,但我有一个用户想要继续使用本地帐户(因为并非所有内容都可以迁移到域用户配置文件),因此我设置了一个快捷方式,用于启动使用 的批处理文件runas.exe
,提示用户输入其域密码。完整的批处理文件如下所示:
cd \path\to\app
whoami | findstr /i "domain\\"
if errorlevel 1 (
runas /user:domain\domuser \path\to\app\app.exe
) else (
app.exe
)
(本质上,仅runas
当用户当前未以域用户身份登录时才会执行此操作。)我没有使用任何其他开关runas
,但是当我尝试它们时,/noprofile
似乎/env
没有任何反应。
在输入密码后,此应用程序启动并显示其初始屏幕runas
。(如果以本地用户身份运行,它会抛出一个失败对话框,而这里没有发生这种情况。)但是,应用程序随后继续出现错误。奇怪的是,如果我Shift右键单击它(该快捷方式或 EXE 本身)并执行“以其他用户身份运行”操作,它就可以正常工作。
我无法访问该程序的源代码,也无法自由讨论其细节。不过,这不是重点 -runas
使用“以不同用户身份运行”启动它有什么不同?
这是 64 位 Windows 10 Pro,但我在 Windows 8.1 Pro 上也看到了这个问题。
答案1
经过一些实验,我注意到总是runas.exe
将程序的启动目录设置为System32
,而以不同用户身份运行将起始方向设置为包含 EXE 的文件夹。
证明
可以通过创建包含以下内容的批处理文件来演示这一点:
echo %cd%
pause
将其放在所有用户都可以访问的文件夹中。如果您在文件资源管理器中双击它来运行它,它将显示包含它的目录。如果您使用以不同用户身份运行。如果您在那里打开命令提示符窗口并执行,如果不在其他用户或系统的 上,runas /user:otheruser test.bat
它将失败(“没有这样的文件”)。这是因为启动于。如果您执行,它将启动并显示 的路径,因为那是它的起始目录。test.bat
PATH
runas
System32
runas /user:otheruser \full\path\to\test.bat
System32
解决问题
如果该程序在其当前/起始目录中看不到某些文件,则会出现奇怪的情况(但不会崩溃)。更新批处理文件以在首先进入正确目录runas
的批处理文件上使用,然后启动该程序。cd