如何从其他exe程序运行Devenv.exe?

时间:2015-02-10 11:16:50

标签: c++ c visual-studio batch-file devenv

我正在尝试使用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);

在运行上面的代码时,我收到了以下错误消息。 Error message from DevEnv.exe

以上消息使我确信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.

任何人都可以指出可能出现的问题吗?

2 个答案:

答案 0 :(得分:0)

如果您查看包含devenv.exe的文件夹,您会注意到还有devenv.com

自动化Visual Studio for build时,请使用devenv.com。批处理文件将自动使用.com而不是.exe(因为PATHEXT变量),您会发现批处理文件未指定扩展名。

PS。而不是将路径硬编码到devenv - 可以在安装时更改 - 使用VS120COMNTOOLS环境变量构建路径(在批处理文件中:%VS120COMNTOOLS%..\ide\devenv)。

答案 1 :(得分:0)

首先可以运行命令行检查,然后尝试使用C代码自动执行。

devenv project.sln /Clean

devenv project.sln /Rebuild Debug /Out "Test.log"