Visual Studio 2008:项目输出 .com 文件

Posted

技术标签:

【中文标题】Visual Studio 2008:项目输出 .com 文件【英文标题】:Visual Studios 2008: Project output .com file 【发布时间】:2009-11-19 16:10:07 【问题描述】:

Visual Studios 2008 有没有办法为控制台项目创建 .com 文件而不是 .exe?现在我必须这样做:

if $(ConfigurationName) == Debug goto :debug

:release
copy ProjectNameConsole.exe ProjectName.com

goto :exit

:debug

:exit

然后对于安装程序,我必须添加复制的 .com 对象,而不是添加项目输出。使用这种方法,我无法调试安装程序,除非我创建 .com 对象进行调试,并更新安装程序以复制该文件而不是发布版本。

如果您想知道,我们有一个同时具有 GUI 和控制台版本的应用程序。 .com 版本的可执行文件充当应用程序的控制台版本。如果exe和com文件同名,用户在控制台窗口调用“ProjectName”时会自动使用com文件。

更新:我想我的问题有点误导。我想创建一个 Windows exe,但我希望让项目输出将对象命名为“ProjectName.com”而不是“ProjectName.exe”。正如 shf301 所指出的,我基本上是在做 Visual Studios 在做的事情。

【问题讨论】:

【参考方案1】:

实际上,这有点痛。不,您不能使用 Visual Studio 创建 MS-DOS 程序。根本没有编译器后端。

.com file 实际上不是Win32 PE。重命名它对这个事实没有帮助。

如果您需要将应用程序同时作为 (Windows) 控制台应用程序和 GUI 变体,则只需创建两个不同的可执行文件(在 Windows 中将两者放在一个程序中会有点问题)。

【讨论】:

感谢您的链接。我经常想知道 .com 文件有什么不同(尽管显然不足以自己用谷歌搜索)。【参考方案2】:

不,你不能用 Visual Studio 创建 MS-DOS 程序,你只能创建 32 位和 64 位 Windows 应用程序,但我认为你并不真的想要一个 MS-DOS 程序。您需要的是一个 Windows 控制台应用程序。控制台应用程序(例如 ipconfig.exe、findstr.exe)不是 MS-DOS 程序,而是使用 32 位控制台的 32 位 Windows 应用程序,并且永远不会在 MS-DOS 中运行。

您可以将.exe 文件重命名为.com,Windows 将handle that fine,因此您只需将控制台应用程序重命名为您想要的文件名。这正是 Visual Studio 本身所做的,请参阅 this。

编辑:现在我更仔细地阅读了您的问题,您确实已经在这样做了,您的问题是将调试版本放入安装程序。为什么不在后期构建步骤中始终将 .exe 重命名为 .com 并将其复制到这样的公共位置:

copy ProjectNameConsole.exe ..\..\ProjectName.com

而不是有不同的调试和发布案例。然后将您的安装程序指向发生构建的位置。要获得调试版本,请在调试中构建您的项目,然后重新构建安装程序。

编辑 2:如果您使用 Visual C++,则有一种更简单的方法。在项目属性中,单击链接器选项并将输出文件更改为:

$(OutDir)\$(ProjectName).exe

$(OutDir)\ProjectName.com

你不需要那个中间步骤

【讨论】:

以上是关于Visual Studio 2008:项目输出 .com 文件的主要内容,如果未能解决你的问题,请参考以下文章

将 C++ 项目从 Visual Studio 2008 转换为 Visual Studio 2010

Visual Studio 2008 输出 - 隐藏 dll 加载和卸载

怎样在visual studio 2008中的c#控制台中用console.writeline语句输出一个字符数组?用foreach循环怎么写

如何在 Visual Studio 2008 中禁用 XAML 文件的“代码分析”?

是否可以使用 VS2008 开发版打开 Visual Studio 2008 数据库项目?

如何在visual studio2008中创建,编译和运行C++程序,