如何从其他 exe 程序运行 Devenv.exe?
Posted
技术标签:
【中文标题】如何从其他 exe 程序运行 Devenv.exe?【英文标题】:How to run Devenv.exe from other exe program? 【发布时间】:2015-02-10 11:16:49 【问题描述】:我正在尝试使用 Visual Studio 的 Devenv.exe 创建一个应用程序 (.exe),该应用程序将用于构建不同配置的项目。我尝试创建一个批处理文件来执行以下操作:
cd "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE"
devenv "%PROJECT_PATH%\MySolution.sln" /Rebuild "Release" /project "MyProject" /out "%PROJECT_PATH%\AutoBuildErrorLog.txt"
其中 PROJECT_PATH 是保存 MySolution.sln 的目录。
而MyProject是MySolution解决方案下的一个项目
上面的批处理文件运行良好并给出了预期的结果。即,MyProject 正在成功构建。
现在我正在尝试通过 exe 应用程序运行上述命令。我尝试如下调用命令:
const char devncmd[] = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/devenv.exe";
const char slncmd[] = "\"C:/Solution Folder with spaces in folder name/MySolution.sln\"";
const char rebuildCmd[] = "/Rebuild";
const char releasecfg[] = "Release";
const char projectcmd[] = "/project";
const char projectnamecmd[] = "MyProject";
const char outcmd[] = "/out";
const char outName[] = "\"C:/Solution Folder with spaces in folder name/AutoBuildErrorLog.txt\"";
int rc = _spawnlp(_P_WAIT, devncmd, slncmd,
rebuildCmd, releasecfg,
projectcmd, projectnamecmd,
outcmd, outName, NULL);
在运行上述代码时,我收到以下错误消息。
上面的消息让我相信 DevEnv.exe 能够执行。
接下来,我尝试将解决方案路径名称 (slncmd[]) 更改如下:
const char slncmd[] = "C:/Solution Folder with spaces in folder name/MySolution.sln";
Devenv 运行没有任何错误,但在我的输出文件 AutoBuildErrorLog.txt 中它表明构建路径存在问题。
The following files were specified on the command line:
Folder
Name/MySolution.sln
These files could not be found and will not be loaded.
谁能指出哪里出了问题?
【问题讨论】:
【参考方案1】:如果您查看包含devenv.exe
的文件夹,您会注意到还有devenv.com
。
在自动化 Visual Studio 进行构建时,请使用 devenv.com
。批处理文件将自动使用.com
而不是.exe
(因为PATHEXT
变量),您会注意到您的批处理文件没有指定扩展名。
PS。与其硬编码到devenv
的路径——它可以在安装时更改——使用VS120COMNTOOLS
环境变量来构造路径(在批处理文件中:%VS120COMNTOOLS%..\ide\devenv
)。
【讨论】:
感谢您的建议。我尝试从.exe 更改为.com。仍然得到相同的结果。这次没有任何东西写入我的 AutoBuildErrorLog.txt。【参考方案2】:先检查命令行是否能够运行,然后尝试在C代码中自动运行。
devenv project.sln /Clean
devenv project.sln /Rebuild Debug /Out "Test.log"
【讨论】:
这一切对我来说都很好,除非我尝试使用安装程序 vdproj 文件运行它:( 然后它只是说命令运行不正确,但我有一个在 powershell 中运行的版本,所以有一个问题需要如何在 cmd 提示符中编写它。非常令人沮丧。这最终在从项目根文件夹运行的 cmd 中工作,该文件夹具有逐字的子安装程序项目devenv "solution.sln" /Build "Debug" /Project "Installer\Installer.vdproj"
以上是关于如何从其他 exe 程序运行 Devenv.exe?的主要内容,如果未能解决你的问题,请参考以下文章
在 devenv.exe 中将 microsoft 编译器从 vc14 更改为 vc12