我创建了一个批处理脚本,可以安装一些.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启动时有不同的行为?
我有什么需要做的来纠正吗?
答案 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.txt
和C:\Temp
,这些文件当然必须在Windows重新启动之前存在。
顺便说一句:如果不应该为所有用户帐户运行此批处理文件,最好使用
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
或者您将批处理文件的快捷方式放入Windows开始菜单的Startup
文件夹(所有用户个人资料或您的用户个人资料)。
对于此类任务,我更喜欢Startup
文件夹而不是Windows注册表Run
条目。