Cli*_*lly 0 vb6 windows-xp windows-vista
我有一个使用表达式的遗留VB6系统
Write #1, (UnitCount
写一个文本文件.(UnitCount是第一个写入的几个短整数.)
这在XP下运行良好但在Vista和Windows 8下不生成文本文件.没有报告错误.
有谁知道如何解决这一问题?
另外 - VB6应用程序安装在C:/ Program Files/IronDuke中
并且文本文件也在这里写入(即在当前目录中).
我知道结束括号.我只包括声明的一部分.
该文件实际上已创建,您无法找回它.它存储在隔离存储中.
这是现代Windows版本中的appcompat功能,从Vista开始.不再允许程序写入c:\program files.或者c:\program files (x86),您在64位操作系统上写入的目录.UAC保护这些目录免受恶意软件和预期但危险的程序的攻击,程序必须通过显示UAC提示来获取提升的权限,以便让用户知道它将进行可能影响其计算机的重大更改.
由于您的VB6 EXE文件看起来像是一个非UAC意识的Windows的古老程序,一个非常准确的猜测,它将自动将文件重定向到独立存储,以允许您的程序正确执行.您也可以轻松读取文件.但当然不是你真正想要实现的目标.
让你的程序显示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>
Run Code Online (Sandbox Code Playgroud)
请注意,在64位操作系统上仍然存在严重问题,您最终将写入c:\ program files(x86)而不是c:\ program files.对此没有简单的解决方法.考虑寻找更适合现代操作系统的现代工具,VB.NET肯定会给你带来更少的麻烦.