执行批处理脚本时的不同行为

时间:2014-08-11 12:52:29

标签: c# windows visual-studio batch-file registry

我创建了一个批处理脚本,可以安装一些.vsix扩展并启动visual studio。

call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"
start /wait VSIXInstaller.exe /q ABC.vsix
start "" "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"

当我通过双击执行脚本时,它可以很好地工作。

我想做的下一件事是在Windows启动时启动脚本。

我在注册表中添加了一个条目:

HKEY_LOCAL_MACHINE -> SOFTWARE -> Microsoft -> Windows - CurrentVersion -> Run

我重新启动了我的计算机,当Windows启动时,脚本已执行,但在安装vsix(扩展程序)之前启动了Visual Studio。

为什么我在直接运行脚本时以及在Windows启动时有不同的行为?

我有什么需要做的来纠正吗?

1 个答案:

答案 0 :(得分:1)

VSIXInstaller.exe没有完整路径启动。因此,Windows首先在当前工作目录中搜索此类应用程序,然后在环境变量 PATH 中定义的所有目录中搜索。

我认为 PATH 中的目录列表不同。

或者工作目录(也称为Start in目录)不同,因为无法为通过Windows注册表项Run启动的应用程序或批处理文件定义工作目录。

如果需要,解决方案是在双引号中指定带有完整路径的VSIXInstaller.exe,然后在命令start的双引号中也需要一个标题。

call "%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"
start "Install VSIX Extensions" /wait "Path to\VSIXInstaller\VSIXInstaller.exe" /q ABC.vsix
start "Configure IDE Environment" "%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"

提示:要了解在Windows启动时执行此批处理文件时会发生什么,请在Windows注册表中指定包含命令的其他批处理文件:

echo Working directory is %CD% 1>"C:\Temp\BatchStdout.txt"
call "Full\Path\To\Above\BatchFile.bat" 1>>"C:\Temp\BatchStdout.txt" 2>"C:\Temp\BatchStderr.txt"

重新启动Windows并查看目录BatchStdout.txt中创建的文件BatchStderr.txtC:\Temp,这些文件当然必须在Windows重新启动之前存在。

顺便说一句:如果不应该为所有用户帐户运行此批处理文件,最好使用

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

或者您将批处理文件的快捷方式放入Windows开始菜单的Startup文件夹(所有用户个人资料或您的用户个人资料)。

对于此类任务,我更喜欢Startup文件夹而不是Windows注册表Run条目。