我有一个用BASIC编写的项目。我不确定确切的原因,但除了从FAT-16文件系统运行之外,应用程序将无法运行。
我宁愿尝试在现代操作系统(Vista / XP)中设置和支持此应用程序的环境,而不是重写它。
有没有人知道如何通过某种代码更改(对BASIC代码)或FAT-16“模拟器”(如果存在这样的东西)来运行这样的应用程序在XP / Vista中运行?
答案 0 :(得分:7)
您可以尝试通过DOSBOX:
运行它DOSBox模拟Intel x86 PC, 配有声音,图形,鼠标, 操纵杆,调制解调器等,必要的 运行许多旧的MS-DOS应用程序 根本无法在现代PC上运行 操作系统,例如Microsoft Windows XP,Windows Vista,Linux和 FreeBSD的
(来自他们的Wiki)
我现在用它好几年了。它很好,稳定且非常坚固。有几个第三方GUI也可以让你的生活更轻松
答案 1 :(得分:5)
除了在虚拟化环境中保持应用程序活着之外,正如已经建议的那样,首先要做的是找出为什么代码似乎需要FAT-16。
如果应用程序(或其运行时)特别邪恶,FAT-16要求可能源于它试图绕过操作系统进行直接磁盘I / O这一事实。如果BASIC代码本身试图拉动该特定的特技,你应该在I / O例程中看到大量的CALL,PEEK,POKE甚至偶尔的IN和OUT语句。确定运行时的内容更加困难:如果它来自Microsoft,基于DOS且不太古老(例如GWBASIC或QuickBASIC / PDS),或者基于Windows,它应该没问题。
无论如何,如果应用程序或运行时正在尝试直接磁盘I / O,那么您将失败:如果没有像代码一样的大量重写代码,那么在现代操作系统上工作几乎是不可能的。
如果应用程序使用普通的BASIC工具进行输入和输出(例如,OPEN“文件”FOR AS#1),并且运行时也使用正常的OS接口,最可能的原因是它只适用于FAT- 16是它被长文件名混淆了。
首先要尝试的是将应用程序放在一个名称较短的目录(例如c:\ myapp)中,然后看看接下来会发生什么。可能它只是起作用:否则,您应该能够通过逐步执行BASIC代码来确定发生了什么(慈善假设调试器是其运行时环境的一部分)。
如果没有关于您的应用运行的确切解释器/编译器的更多信息,则无法更详细地回答您的问题。如果到目前为止的答案没有帮助,您可能需要编辑您的问题以包含此信息。
答案 2 :(得分:1)
在VMWare虚拟机中运行旧版本的Windows,该虚拟机本身在现代操作系统中运行。
答案 3 :(得分:1)
从闪存,zip驱动器或任何可移动媒体运行它。
Windows XP将1GB usb闪存驱动器格式化为FAT而没有任何问题,没有其他工具是必需的
此外,如果应用程序确实是邪恶,那么您希望通过驱动器的边界来限制其邪恶。
答案 4 :(得分:0)
取决于环境:在现代操作系统上仍然可以创建Fat-16文件系统,您可能只需要其他工具,例如Acronis DiskDirector甚至某些Linux的fdisk Variant。
请记住,FAT-16仅限于2 GB的分区大小。
但如前所述:最好找出原因。听起来像是某种WTF-Copy-Protection。
答案 5 :(得分:0)
我的第二个@ eugensk00的建议,我们有一些稍微古怪的仪器软件,它不会保存到NTFS硬盘,但会保存到一个小记忆棒(1GB)......
答案 6 :(得分:0)
您可以将代码直接导入VB.NET(尽管几乎肯定需要进行一些修改)。然后,您可以使用VB.NET调用替换原始应用程序的文件IO调用(这几乎肯定是您的问题),让您摆脱FAT16问题。
答案 7 :(得分:0)
另请注意,一些老派程序在编写文件之前首先检查是否有足够的磁盘空间,如果驱动器太大而导致其溢出显然正在使用的16位计数器,则会导致古怪的问题。 (如果是这种情况,那么它将起作用,或者不起作用,具体取决于溢出的性质。)