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

C++ 如何从其他exe程序运行Devenv.exe?,c++,c,visual-studio,batch-file,devenv,C++,C,Visual Studio,Batch File,Devenv,我正在尝试创建一个应用程序(.exe),该应用程序将用于使用Visual studio的Devenv.exe以不同的配置构建项目。我已尝试创建一个批处理文件,如下所示: cd "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE" devenv "%PROJECT_PATH%\MySolution.sln" /Rebuild "Release" /project "MyProject" /out "%PROJECT_

我正在尝试创建一个应用程序(.exe),该应用程序将用于使用Visual studio的Devenv.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"
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);
其中PROJECT\u PATH是保存MySolution.sln的目录

MyProjectMySolution解决方案下的项目

上述批处理文件运行良好,并给出了预期结果。i、 例如,我的项目建设成功

现在我正试图通过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"
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.

有人能指出哪里出了问题吗?

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

在为生成自动化Visual Studio时,请使用
devenv.com
。批处理文件将自动使用
.com
而不是
.exe
(因为
PATHEXT
变量),您会注意到批处理文件没有指定扩展名


另外,不要硬编码路径到
devenv
——它可以在安装时更改——使用
VS120COMNTOOLS
环境变量来构造路径(在批处理文件中:
%VS120COMNTOOLS%..\ide\devenv
)。

检查命令行是否能够首先运行,然后尝试在C代码中执行自动操作

devenv project.sln /Clean

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

谢谢你的建议。我尝试从.exe更改为.com。还是得到了同样的结果。这一次没有任何东西写入我的AutoBuildErrorLog.txt。这一切对我来说都很好,除非我尝试使用安装程序vdproj文件运行它:(然后它只是说命令运行不正确,但我在powershell中运行了一个版本,因此在cmd提示符中需要如何编写该命令存在问题。非常令人沮丧。这最终在cmd中工作,从项目根文件夹运行,该文件夹有一个子安装程序project verbatim
devenv“solution.sln”/Build“Debug”/project“Installer\Installer.vdproj”