FAT-16在现代操作系统上
我有一个用BASIC编写的项目。我不确定确切原因,但该应用程序将无法正常运行,除非从FAT-16文件系统运行。
我宁愿尝试在现代OS(Vista / XP)中设置和支持该应用程序的环境,而不必重写它。
有谁知道如何通过某种代码更改(更改为BASIC代码)或者FAT-16"仿真器"(如果存在)来使这样的应用程序在XP / Vista中运行?
解决方案
在本身运行在现代OS中的VMWare虚拟机中运行Windows的较早版本。
我们可以尝试通过DOSBOX运行它:
DOSBox emulates an Intel x86 PC, complete with sound, graphics, mouse, joystick, modem, etc., necessary for running many old MS-DOS applications that simply cannot be run on modern PCs and operating systems, such as Microsoft Windows XP, Windows Vista, Linux and FreeBSD
(来自他们的Wiki)
我已经使用了几年了。它是好的,稳定的并且非常健壮。同时具有多个第三方GUI,使生活更轻松
正如已经建议的那样,除了使应用程序在虚拟环境中保持活动之外,要做的第一件事就是弄清楚为什么该代码似乎需要FAT-16.
如果该应用程序(或者其运行时)特别有害,则FAT-16要求可能源于它试图绕过操作系统进行直接磁盘I / O的事实。如果BASIC代码本身正试图拉该特定的特技,则应该在I / O例程中看到很多CALL,PEEK,POKE,甚至偶尔看到IN和OUT语句。确定运行时的状态更加困难:如果它来自Microsoft,基于DOS且不太古老(例如GWBASIC或者QuickBASIC / PDS)或者基于Windows,则应该可以。
无论如何,如果应用程序或者运行时都在尝试直接磁盘I / O,我们将会迷失方向:如果没有大量的,类似于重写的代码更改,要使事情在现代OS上运行几乎是不可能的。
如果应用程序使用常规的BASIC设施进行输入和输出(例如,对于AS#1,则为OPEN"文件"),并且运行时也使用常规的OS接口,则最有可能仅在FAT-16上工作的原因是:长文件名使它完全混乱。
首先尝试将应用程序放在一个短名称目录中(例如c:\ myapp),然后看看接下来会发生什么。可能它只是起作用:否则,我们应该能够通过逐步执行BASIC代码来弄清楚发生了什么(明智地假设调试器是其运行时环境的一部分)。
如果没有有关应用程序运行所在的确切解释器/编译器的更多信息,就不可能更详细地回答问题。如果到目前为止的答案仍然没有帮助,我们可能需要编辑问题以包含此信息。
取决于环境:在现代OS上仍然可以创建Fat-16文件系统,我们可能只需要其他工具,例如甚至某些Linux fdisk Variant的Acronis DiskDirector。
请记住,FAT-16的分区大小限制为2 GB。
但是如前所述:最好找出原因。听起来像某种WTF-Copy-Protection。
从闪存,zip驱动器或者任何可用的可移动媒体中运行它。
Windows XP将1GB USB闪存驱动器格式化为FAT,没有问题,不需要其他工具。
此外,如果应用程序确实是邪恶的,那么我们希望通过驱动器的边界来限制它的邪恶。
我第二次@ eugensk00的建议,我们有一些古怪的乐器软件,它不会保存到NTFS硬盘上,但会保存到一个小记忆棒(1GB)中。
我们也许可以将代码直接导入VB.NET(尽管几乎可以肯定需要进行一些修改)。然后,我们可以用VB.NET调用替换原始应用程序的文件IO调用(这几乎肯定是问题),从而使我们摆脱FAT16问题。
还要注意,某些老式程序在写入文件之前会先检查是否有足够的磁盘空间,如果驱动器太大而导致显然使用的16位计数器溢出,则会导致古怪的问题。 (如果是这样,则根据溢出的性质,它会起作用还是不起作用)。