如何定位多个版本的Windows

时间:2013-04-02 03:35:18

标签: windows windows-xp targeting

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

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

我正在开发的朋友对计算机知之甚少,但看着他的样本目标机器,我看到安装了Java 6,以及Windows Visual C ++ 2008(Windows XP SP3)。作为替代方案,假设这两个框架安装在所有这些目标计算机上,您建议使用哪一个以获得最大的跨平台支持(仅适用于Windows版本)?

P.S。我正在使用安装了Visual Studio 2012的64位Windows 7计算机进行开发。我有Python,一些Java和一些C#的经验。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

这很难以客观和公正的方式回答,因为一般的规则是“最好的”语言来写一些东西通常是你最熟悉的语言。这是你工作效率最高的语言,即使有一些障碍你必须要在周围工作,如果你已经熟悉这种语言,那么你将处于最佳状态。选择。

所以,因为我主要是一名C ++开发人员,所以我建议你用C ++编写应用程序。如果您不是 C ++开发人员,这将是一个非常愚蠢的建议。你需要花更长的时间才能学习C ++(甚至更少调试和/或长期维护代码),而不是用其他语言编写应用程序,解决任何问题,并获得与你的生活。

所需的运行时问题并不能解决很多问题。几乎所有流行的语言都需要首先安装某种类型的运行时,并且您不能简单地依赖于那些在任何地方安装的运行时。关于唯一的区别是需要安装的运行时包的 size 和隐喻“权重”。这是我对几种流行语言及其要求细分的基本尝试:

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

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

  • C ++ 即使C ++应用程序编译为不需要运行时环境的本机非托管代码,如果使用Microsoft的编译器,也需要安装相应版本的C ++可再发行的运行时库。例如,如果使用编译器的第10版(与VS 2010捆绑在一起)进行编译,则需要安装Visual C ++ 2010 Runtime。就像托管的运行时一样,你不能指望它已经安装在机器上了。另一个应用可能已安装它,但它可能没有。您始终必须管理自己的依赖项。幸运的是,这是一个非常的依赖(相对而言),因此分发的交易并不是那么重要。

    或者,您可以将运行时环境静态链接到C ++应用程序中。这会略微增加其大小,但意味着您不必分发可再发行组件。这样做的缺点是您不会受益于CRT的任何安全更新,因为代码静态链接到您的应用程序。您将不得不重新编译和重新分配以获得所有这些好处,这是很多工作。但是,如果你绝对必须有一些没有任何依赖性的东西,那么这就是你需要做的。

  • VB 6 有点讽刺的是,您可以保证在任何现有的Windows安装中,旧的VB 6应用程序都可以开箱即用。这不是因为VB 6不需要运行时环境 - 它大多肯定是这样的,只是因为它已经包含在Windows本身的过去几个版本中,并且自从VB 6已经过生命之后就不会升级好几年了。这就是为什么这对你来说不是一个好选择的原因之一;另一个是你不能(至少不容易)用VB 6创建命令行应用程序。

因此,在很多情况下,您几乎必须拥有一个受控环境,您知道已经安装了目标运行时,或者您必须将运行时依赖项与应用程序一起分发(理想情况下,安装程序可以为用户无缝管理所有这些)。现在我们又回到了我的开始 - 语言决策最好基于你已经知道哪个并且最适合与之合作。