如何从其他 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 的目录。

MyProjectMySolution解决方案下的一个项目

上面的批处理文件运行良好并给出了预期的结果。即,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?的主要内容,如果未能解决你的问题,请参考以下文章

VS2010:如何运行 devenv 以不并行化构建

在 devenv.exe 中将 microsoft 编译器从 vc14 更改为 vc12

CCnet devenv.exe 错误

带有 /I 和空格的 Devenv.exe

如何通过 devenv.exe\com 构建具有平台配置的项目?

使用 VS2010 的 devenv.exe 部署 Web 应用程序