3

我需要编写一个简单的命令行程序,它可以在 Windows XP 上运行(大多数机器都有 SP3,但有些可能没有)一直到 Windows 7。

我希望能够将它编译成一个不需要我安装额外框架(如 .NET 或 Java)的可移植文件。我应该能够将文件拖到机器上并能够单击并运行。我不介意我是否必须为不同版本的 Windows 进行编译,但如果能够编写一个可以全面使用的版本,那就太好了。我不在乎我是否必须用我不熟悉的语言编写它,程序很简单。我应该用什么语言编写代码来实现这一点?

我正在为其开发的朋友对计算机了解不多,但是看着他的示例目标机器,我看到安装了 Java 6 和 Windows Visual C++ 2008 (Windows XP SP3)。作为替代方案,假设这两个框架都安装在所有这些目标机器上,您建议使用哪一个来获得最大的跨平台支持(仅跨 Windows 版本)?

PS 我正在安装 Visual Studio 2012 的 64 位 Windows 7 机器上开发。我有使用 Python、一些 Java 和一些 C# 的经验。

在此先感谢您的帮助!

4

1 回答 1

2

这将很难以客观和公正的方式回答,因为一般规则是,写东西的“最佳”语言通常是你最熟悉的语言。这是您工作效率最高的语言,即使您必须解决/解决一些障碍,如果您已经对您的语言有经验,那么您将处于最佳位置选择。

所以,因为我主要是 C++ 开发人员,所以我建议您使用 C++ 编写应用程序。如果您不是C++ 开发人员,这将是一个非常愚蠢的建议。与仅用另一种语言编写应用程序、解决任何问题并获得继续你的生活。

所需运行时的问题并不是一个能够解决太多决定的问题。几乎每一种流行的语言都需要先安装某种类型的运行时,而且你不能简单地依赖那些随处安装的语言。唯一的区别是需要安装的运行时包的大小和隐喻的“重量”。这是我对几种流行语言及其要求进行细分的非常基本的尝试:

  • Java众所周知,Java 应用程序需要安装 Java 运行时。这通常是一个非常大的运行时环境,你当然不能依赖它安装在任何地方。很多人没有安装 JVM(如果他们接受了最近的坏消息,他们甚至可能不想要一个)。

  • .NET(包括 C#、VB.NET 等)与 Java 应用程序一样,以 .NET Framework 为目标的应用程序需要安装 .NET Framework。从统计上讲,任何给定的机器可能比 Java 运行时更可能安装它(如果只是因为微软通过 Windows 更新推出它),但你仍然不能指望它在那里。这也是一个大而重的依赖。

  • C++即使 C++ 应用程序编译为不需要运行时环境的本机、非托管代码,如果您使用 Microsoft 的编译器,您将需要安装适当版本的 C++ Redistributable Runtime Library。例如,如果您使用版本 10 的编译器(与 VS 2010 捆绑)进行编译,则需要安装 Visual C++ 2010 Runtime。就像托管运行时一样,您不能指望它已经安装在机器上。另一个应用程序可能已安装它,但它可能没有。您始终必须管理自己的依赖项。幸运的是,这是一个非常的依赖项(相对而言),所以分发并不是什么大问题。

    或者,您可以将运行时环境静态链接到您的 C++ 应用程序。这会稍微增加它的大小,但意味着您不必分发可再分发的内容。这样做的缺点是您不会从 CRT 的任何安全更新中受益,因为代码静态链接到您的应用程序中。您必须重新编译和重新分发才能获得所有这些好处,而且工作量很大。但是,如果您绝对必须让某些东西在没有任何依赖关系的情况下运行,那么这就是您需要做的。

  • VB 6具有讽刺意味的是,您可以保证旧的 VB 6 应用程序将在任何现有的 Windows 安装上开箱即用地运行。这并不是因为 VB 6 不需要运行时环境——大多数情况下确实如此,只是在过去的几个版本中它已经包含在 Windows 本身中,并且由于 VB 6 已经结束生命周期,因此永远不会升级好几年了。这就是为什么这对您来说不是一个好选择的原因之一;另一个是您不能(至少不容易)使用 VB 6 创建命令行应用程序。

所以在很多情况下,你要么必须有一个受控环境,你知道你的目标运行时已经安装,要么你必须与你的应用程序一起分发运行时依赖项(理想情况下是一个管理所有这些的安装程序无缝地为用户服务)。现在我们回到我开始的那个——语言决定最好基于你已经知道并且最适合使用/使用的语言。

于 2013-04-02T03:51:38.587 回答