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 文件的“代码分析”?