在Windows上运行DOS应用程序

2020-07-26 12:34:53

据我所知,Windows1.0被认为是一个笑话,一个象征性的努力,意在履行微软做出的承诺,仅此而已。它是否打算在任何比公共技术演示更苛刻的环境中实际运行DOS应用程序,这是值得怀疑的。

它的问题之一是没有重叠的窗口,而是使用平铺窗口管理器。这看起来相当令人不快,但考虑到所有因素,设计得出人意料地好。当你启动一款应用程序时,默认情况下,它通常会占据整个屏幕,其他应用程序会最小化到任务栏中的图标-这是绿色区域,在那里你可以看到一个软盘图标,代表最小化的MS-DOS高管。然而,一旦你启动了一款应用程序,你就可以将另一个图标拖到屏幕上,以水平或垂直方式拆分视图,你还可以调整这些拆分的大小,以适应窗口的内容。然后,您可以根据需要拖动应用程序的标题栏来重新排列和添加新的拆分。

在更高的分辨率下(这是可能的,尽管很少见),这可能是一个有点实用的用户界面,但我发现它很难看,而且考虑到公众对Windows 1.0I&D的反应,我猜我并不孤单。当然要注意的是,这个操作系统有一些原生的图形应用程序--有几个程序实际上是为Windows1.0发布的,而且API足够稳定,它们仍然可以在更晚的版本中运行。

至少可以说,我对这个版本的体验是脱节的。我花了几天时间才设法让它正确运行,我最终发现你必须在DOS 3.3上运行它,否则它会以一堆奇怪的方式崩溃。我在任何地方都找不到手册,所以我不得不根据Windows2非增强版的文档部分地推测它是如何工作的,而非增强版的Windows2基本上是相似的。

因此,首先,我将尝试运行dBASE II。这是一个非常古老但非常受人尊敬的PC应用程序,创建于1983年,我想有些人在85年左右仍会使用它,尽管它在84年已被dBASE III取代。

这是您第一次将Windows用于其核心目的之一,那么用户对此过程有何感想呢?嗯,毫无疑问,这是一条错误消息。您尝试运行已使用多年的多个程序中的一个,系统告诉您Windows将运行该程序,但您收到一条错误消息,指出Windows找不到文件,并且没有解释这一问题的原因。这是一个响亮的UX湿屁,毫不含糊。

我找不到Windows1的手册,但对于Windows2,手册中提到的Windows用户指南有163页,而且还要运行几十页--这一部分更容易理解,因为在386年之前的时代,如何自动运行DOS程序的技术还没有出现。简而言之,用户即将被带到旧的项目学校,并被要求获得学位。

请注意,它是在全屏模式下运行的--这款应用占据了整个屏幕,就像它在DOS下正常运行一样,而且(我可以断定)无法返回Windows或更改程序。

当你退出应用程序时,它会一直留在屏幕上,直到你按下一个键-这样如果程序在退出之前打印了一些东西,你可以在Windows再次接管屏幕之前阅读它。你可以想象,如果一些应用程序没有做到这一点,它们将毫无用处。

当以这种方式操作时,Windows只不过是当时常见的那种程序启动程序,根本没有多任务处理。为了超越这一点,您需要一个计划信息文件-前面提到的丢失的计划信息文件。

我在上面向你展示的并不是Windows最好的表现。运行DOS软件有更好的方法,但它们需要用户做大量的工作。

如果程序运行良好(叹息),Windows就能以更现代的格式运行它们。也就是说:

这里,dBASE II正在一个窗口中运行。它的更新速度比运行全屏时慢,我猜这是因为Windows用自己的代码取代了用于打印文本的BIOS例程,将每个DOS应用程序的文本输出存储在内存的不同位置,而且它只定期检查内存是否有更新,并更新图形屏幕。

在此模式下我还可以执行其他操作,但我们将很快介绍这些操作。让我们先来看看我是如何做到这一点的。要运行此程序,我使用Pifedit.exe创建了一个PIF:

您可能知道PIF格式是在Windows95中继续用于DOS应用程序快捷方式的格式。这种格式起源于IBM TopView,在概念上从未改变,只是在大多数情况下Windows 95不需要用户干预。在这里,绝对是。

PIF主要告诉Windows一个应用程序是如何表现良好的。各种直接修改复选框警告Windows应用程序中需要小心处理的部分。这些选项中约有一半禁用窗口模式,并强制应用程序在全屏模式下运行。以下是这些设置的大致用途:

首先,您必须给出可执行文件的名称,以便Windows知道何时使用此PIF-与Windows的较新版本不同,PIF不绑定到磁盘上的特定文件。如果在计算机上的任何位置启动DBASE.EXE(或.com),而不考虑驱动器或文件夹,则此PIF将生效。

您还可以给应用程序起一个友好的名称,这样它就会显示一个比文件名更好的标题,并给出命令行参数和默认的运行目录。

然后,我们可以选择告诉Windows程序需要多少RAM,以及它喜欢多少。这会影响Windows向程序报告的可用RAM的大小,因此如果您将最小值设置为128K,将所需的值设置为512K,而Windows发现256K可用,则它会向应用程序报告该大小。

现在我们有了修改框:Screen复选框适用于直接写入显存的应用程序,并且只是强制使用全屏模式。

键盘适用于直接读取键盘的应用程序,并禁用所有任务切换快捷键-这意味着如果您启用此功能,而某个应用程序无法让您退出,则您将被永久困在该应用程序中,直到您重新启动。

内存适用于两种情况:一种是用于启动然后退出的应用程序(称为TSR),它们会将自己留在内存中,以便其他应用程序可以访问它们的代码;另一种情况是当你想要运行一个几乎占用所有系统内存的应用程序时,在这种情况下,Windows会将自己交换到磁盘上,以便为该应用程序留出更多运行空间。

Com1和com2很有趣;它们只给该程序独占访问串行端口的权限,这样两个想要使用同一端口的应用程序就不能同时运行。令我惊讶的是,这并不适用于打印机,但我认为在这一点上,打印本来应该通过Windows打印假脱机程序来处理的。

接下来是Program Switch(程序切换)选项。这涉及到任务切换的机制。为了从一个程序切换到另一个程序,Windows需要保存一份屏幕副本,以便在应用程序被召回时恢复它。";text";保留4KB,足以显示一屏文本。";图形/多个文本";保留多达36KB以保存位图屏幕。";防止";禁用切换,节省4KB。

屏幕交换应该指的是PrintScreen行为--但是我不能让它在Windows1中工作。在2.x中,这些设置允许你按Alt+PrintScreen来截图正在运行的DOS应用程序,这需要Windows保留一些内存来存储截图。请注意,在文本模式下,屏幕截图将只是文本,您可以将其粘贴到记事本等中,而在图形模式中,屏幕截图将是您可以粘贴到画图等中的位图。我不确定为什么这个不起作用,而且我也没有手册可供参考。

最后,你可以让应用程序在退出时自动关闭-否则我们会看到一个僵尸窗口,稍后你会看到这个窗口。

作为用户,您需要为要运行的每个程序手动创建这些PIF之一。Windows附带一小类产品:

当然,这些都是针对当时流行的第三方应用程序进行了优化,随着时间的推移,微软将继续这种做法,热情与日俱增。然而,在这一点上,世界上有数千个DOS应用程序,所以只有60个左右的DOS应用程序随操作系统一起提供,用户几乎肯定需要经常创建他们自己的PIF。

如果程序设置了PIF,使其在全屏模式下运行,除了使用Alt+Tab将其最小化之外,您不会得到太多便利。以下是任务栏中的最小化数据库:

您可以启动dBASE的多个副本,并通过ALT+Tab键退出,然后单击所需的副本在它们之间切换。这似乎是一个相当烦人的过程--我似乎不能在程序之间直接使用Alt+Tab键;它只是高亮显示图标,之后我必须按空格键才能获得此菜单,然后选择缩放以重新打开应用程序。它一点也不光滑。

全屏应用程序似乎不能做任何其他的事情了。这在以后的版本中会变得更好一些,但Windows主要是关于...。Windows,因此大部分功能将保留在其中。

窗口模式提供了许多新选项。我在这里测试了fdisk,因为它是一款非常干净的第一方微软应用程序,具有文本模式UI:

首先,如图所示,我们可以在拆分窗口中运行,可以与其他DOS应用程序一起运行,也可以与本地Windows图形应用程序一起运行。这很快就会变得很拥挤,但一对并排的窗户可能会是一个有点有用的几何体。您可以继续启动进程,直到RAM耗尽-我在这里将其设置为3,但是通过对PIF进行一些调整,我可能可以运行更多。

请注意类似名称的全屏模式周围的圆括号,Windows会让应用程序处于打开状态,这样您就可以看到最终的输出。要真正关闭窗口,您不能只按一个键,但是,您必须上去并实际点击“窗口”菜单上的“关闭”选项。

奇怪的是,似乎并不是所有的程序都会出现这种情况--有些程序,比如fdisk,会立即退出。我不确定这是因为他们向操作系统返回了一些不同的退出代码还是其他原因。这是PIF中的退出时关闭窗口选项应该控制的。

你可以最大化一个DOS窗口来填满整个屏幕,甚至覆盖任务栏,我相信在这个大小下你会得到一个完整的80x25的显示。

随着应用程序在窗口中运行,您现在可以使用鼠标以有限的方式与其交互。在这里,我已经从DOS窗口复制了一些文本,并将其粘贴到Write中。

您也可以直接粘贴到DOS框中,您的文本将作为虚拟击键输入。这种互操作性是证明Windows存在的一大要点-例如,我可以复制我在dBASE会话中创建的复杂命令,并将它们保存在文本文件中以备频繁重复使用,这很可能是由DOS下称为TSRS的特殊程序实现的,但充其量也就是乏味乏味。

你会注意到窗口菜单中的一些东西--关闭选项是灰色的。如果您了解到在此版本的Windows中,没有DOS程序的合作是不可能退出的,您会感到惊讶吗?没有诡计,也没有变通办法--这是做不到的。一旦启动了DOS程序,它就必须自行退出,否则它就会停滞不前地运行。

...一次只有一个人实际执行。当我从第一个单击到第二个时,它冻结了,而第二个开始运行。Windows只为一个DOS任务提供处理器时间,可能是因为不断卸载和重新加载多个应用程序的硬件环境的复杂性太高,无法高效而可靠地完成。

到目前为止,我运行的应用程序在如何与屏幕交互方面非常简单-它们所做的一切就是打印文本。如果我们试图运行更复杂的程序,Windows就会出现问题。以下是第#39;个多计划4:

这是在全屏模式下启动的,但是如果我关闭PIF中的Direct Modifies:Screen标志,我会得到一个没有文本的空白白色窗口。我尝试运行任何其他试图拥有文本模式GUI风格的界面,如DOS Edit或QBasic,都得到了同样的结果。奇怪的是,只要我按下任何键,它也会崩溃-即使我在全屏运行它,这种情况也会发生。只要存在PIF,只要我做任何事情,它就会崩溃--如果我删除了PIF,它就可以正常运行,但它是全屏运行的,而且没有任务切换。

我应该指出的另一件事是,它根本不支持彩色文本-这里是fdisk全屏运行,而不是windowed。请注意,全屏文本是明亮的白色和灰色,但在窗口中,它全部呈现为白色上的黑色。我现在不确定为什么会这样-Windows支持颜色,而且这些信息肯定存储在内存中,所以他们为什么不使用它,我不知道。

正如前面提到的,Windows1并不是所有的报告都认为是好的,我会说它不是好的。

平铺窗口管理器非常不舒服,尽管它尽可能地精简,但感觉它对屏幕空间的利用率非常低。它看起来或感觉都不光鲜,而且需要太多乏味的小提琴才能让一切都正常工作--你无法从屏幕截图中判断出来,但仅仅因为在这个操作系统中从一个任务移动到另一个任务需要大量的额外点击,你就花了很长时间才能让所有这些都正常工作。GUI不好。

话虽如此,但在某种程度上,它确实兑现了承诺。一旦创建了PIF,如果DOS应用程序足够基础,它们就可以运行,并且在程序之间复制文本非常有用。然而,我扔给它的一些应用程序在一个窗口里是不能运行的,有一个根本就不能运行。

这个版本不会让Windows声名鹊起。这在一段时间内不会发生,但让我们拭目以待微软下一步的发展方向。