C++ 如何从其他exe程序运行Devenv.exe?
我正在尝试创建一个应用程序(.exe),该应用程序将用于使用Visual studio的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_
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的目录
而MyProject是MySolution解决方案下的项目
上述批处理文件运行良好,并给出了预期结果。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”