我必须维护一个 VB6 软件,它基本上从第二个程序导出数据并将它们导入到关于第三个程序的数据文件中。所以,这个导入/导出工具在 Windows 95 到 XP 下运行了好几年,但是,现在,我必须更新它以支持 Vista 和 7……当它写到第三个程序的文件时它失败了。此时,我刚刚在 Windows 7 下进行了测试,但我想在 Vista 下也会如此。
这是详细的问题:
当我的程序尝试访问第三个程序的数据进行写入时,我收到此错误:“运行时错误'75':路径/文件访问错误”。因此,这听起来像是一个 UAC 阻塞,因为我的程序试图获得访问权限以写入他不拥有的数据文件。然后,如果我以管理员权限或与 XP 兼容性运行我的程序,它可以工作:没有错误,并且第三个程序的数据文件被很好地修改。
此时我想知道如何以编程方式解决此错误(对我的程序来说是致命的,因为它的主要工作被阻止:导出/导入数据):在安装期间(我正在使用 Inno Setup)或在运行时。
什么是正确的方法?以编程方式强制“XP兼容性”或提升我的程序以管理员权限启动?如何实现这一点以及何时(在安装期间或运行时)?清单是否可以更改此字段中的某些内容(此时从未使用过任何清单)?
此外,无论是哪种方式(XP 兼容性或管理员权限),UAC 都会在每次启动时警告用户系统更改:非常烦人:(
那么,如何让我的程序在 Windows 7 和 Vista 下像在 XP 下一样顺利运行,知道它除了写在第三方数据文件中(因为它是它的主要目的)别无选择?
等待您的光辉回复...
PS:另外(这可能很重要),我的程序本身并不知道数据文件的路径,但它是使用通用对话框选择它的用户。
好的,我回来有一些消息。我已经嵌入了一个清单,它使用 VB6 的清单创建器(马特在他的回复中指出的那个)执行 level="requireAdministrator" 。
如果我以管理员身份安装(在 Windows 7 下)我的程序,它会毫无问题地安装,然后程序会毫无问题地启动并完成其工作(读取和写入不属于我的程序的任何文件)非常顺利,没有任何问题问题。所以,在这种情况下完美!
尽管如此,如果我以简单用户身份登录,它在使用管理员密码询问权限后安装良好,然后程序毫无问题地启动,但是(这是剩下的问题)我再次陷入“路径/文件访问错误” (错误'75')当读取或写入外部文件(不属于我的程序)时。
所以,这是我的另一个问题:如何解决这个以简单用户身份记录的错误?这是否意味着提升不起作用(而在其他情况下似乎对任何步骤都有效:安装、启动、读/写)仅在这种特定情况下?说到这里,心里有点乱……
编辑:嗯,我想我已经理解了一件事,但需要你的确认(或不确认)。我将调用我的程序 B。B 将读取/导入程序 A 拥有的数据,然后写入/导出到程序 C 拥有的数据。
我的困惑是我重新安装了 B 被记录为简单用户,而不是程序 A 和 C 仍然安装被记录为管理员。因此,当 B 读取有关 A 的数据时,尽管有提升,但它失败了,因为这些 A 的数据归管理员所有(即使这些 A 的数据不在用户特定的路径中,但是,说“C:\email_data ”)。
如果我重新安装以简单用户身份记录的所有三个程序,它就可以工作(没有警告也没有错误)。
所以,我重新提出我的问题:既然提升工作(这应该允许程序获得管理员权限),为什么程序 B(由用户安装)无法读取有关程序 A(由管理员安装)的数据?我是否应该在 Inno Setup 过程中添加一些内容以仅以管理员身份安装我的程序(知道我对 A 和 C 程序的安装方式没有任何影响)?