VB6使用写入#1(单位计数
我有一个使用表达式的遗留VB6系统VB6使用写入#1(单位计数,vb6,windows-xp,windows-vista,Vb6,Windows Xp,Windows Vista,我有一个使用表达式的遗留VB6系统 Write#1,(单位计数 写入文本文件。(UnitCount是写入的几个短整数的第一个。) 这在XP下运行良好,但在Vista和Windows 8下不会生成文本文件。未报告任何错误 有人知道如何解决这个问题吗 另外-VB6应用程序安装在C:/Program Files/IronDuke中 文本文件也要写在这里(即在当前目录中) 我知道结束括号。我只包括了语句的一部分。文件实际上是创建的,您就是找不到它。它存储在独立的存储中 这是从Vista开始的现代Wind
Write#1,(单位计数
写入文本文件。(UnitCount是写入的几个短整数的第一个。)
这在XP下运行良好,但在Vista和Windows 8下不会生成文本文件。未报告任何错误
有人知道如何解决这个问题吗
另外-VB6应用程序安装在C:/Program Files/IronDuke中
文本文件也要写在这里(即在当前目录中)
我知道结束括号。我只包括了语句的一部分。文件实际上是创建的,您就是找不到它。它存储在独立的存储中 这是从Vista开始的现代Windows版本中的appcompat功能。不再允许程序写入
c:\program files
或c:\program files(x86)
,您将在64位操作系统上写入的目录。UAC保护这些目录不受恶意软件和意图良好但危险的程序的攻击。该程序必须通过显示UAC提示符来获得提升的权限,以让用户知道它将进行可能影响其机器的重大更改
由于您的VB6 EXE文件在Windows中看起来像一个不支持UAC的古老程序,这是一个非常准确的猜测,它将自动将文件重定向到独立的存储,以允许您的程序正确执行。您也可以轻松地读回该文件。但当然,这不是您真正想要完成的
让您的程序显示UAC提升提示有点棘手,VB6不是设计用来在EXE文件中嵌入清单的。清单在15年前就不存在了。您需要在与yourapp.EXE文件相同的目录中创建一个名为yourapp.EXE.manifest的文件。请使用可以编写utf-8编码文件(不是VB6)的文本编辑器让它看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>
请注意,在64位操作系统上仍然存在严重问题,最终将写入c:\program files(x86)而不是C:\程序文件。没有简单的解决办法。请考虑寻找更适合现代操作系统的现代工具,VB.NET肯定会给您带来更少的麻烦。 < P>文件实际上是创建的,只是找不到它。它被存储在隔离存储中。 这是从Vista开始的现代Windows版本中的appcompat功能。不再允许程序写入
c:\program files
或c:\program files(x86)
,您将在64位操作系统上写入的目录。UAC保护这些目录不受恶意软件和意图良好但危险的程序的攻击。该程序必须通过显示UAC提示符来获得提升的权限,以让用户知道它将进行可能影响其机器的重大更改
由于您的VB6 EXE文件在Windows中看起来像一个不支持UAC的古老程序,这是一个非常准确的猜测,它将自动将文件重定向到独立的存储,以允许您的程序正确执行。您也可以轻松地读回该文件。但当然,这不是您真正想要完成的
让您的程序显示UAC提升提示有点棘手,VB6不是设计用来在EXE文件中嵌入清单的。清单在15年前就不存在了。您需要在与yourapp.EXE文件相同的目录中创建一个名为yourapp.EXE.manifest的文件。请使用可以编写utf-8编码文件(不是VB6)的文本编辑器让它看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>
请注意,在64位操作系统上仍然存在严重问题,最终将写入c:\program files(x86)而不是C:\程序文件。没有简单的解决办法。请考虑寻找更适合现代操作系统的现代工具,VB.NET肯定会给你带来更少的麻烦。 < p>你的应用程序被当作遗留的(不是Vista知道的),所以你写入受保护位置的文件正在虚拟化。(非“隔离”)而不是导致安全冲突异常。每个用户的配置文件路径中都存在文件系统VirtualStore VB6完全有可能嵌入应用程序清单,但它不会为您生成清单。您只需单独创建清单文件,然后将其作为类型为#24、Id为#1的自定义资源包含,它将立即在中编译 需要注意的一点是,清单文件应使用UTF-8 XML填充到4字节的偶数倍。如果需要填充,您可以在末尾添加空格。您可以从记事本将其保存为ANSI,因为通常只使用7位ASCII字符子集,这避免了UTF-8 BOM的风险,您不希望记事本写入 在需要时,甚至有一些简单的方法可以绕过WOW64重定向,尽管没有很好的理由这样做
但是,如果程序确实正在将此文件写入其当前目录,您可能会发现修改“开始”菜单快捷方式或创建新的快捷方式要容易得多。只需设置快捷方式的当前目录(“开始于”)到某些合法的可写位置,如您的文档目录、D:驱动器上的某些目录、公用特殊文件夹等。您的应用程序被视为遗留(不支持Vista),因此您写入受保护位置的文件被虚拟化(而非“隔离”)而不是导致安全冲突异常。每个用户的配置文件路径中都存在一个文件系统VirtualStore VB6完全有可能嵌入应用程序清单,但它不会为您生成清单。您只需单独创建清单文件,然后将其作为类型为#24、Id为#1的自定义资源包含,它将立即在中编译 一个洞穴