在管理员帐户上安装我的 VB6 应用程序后,我想在标准用户帐户上运行它。双击快捷方式 Windows Installer 后立即启动,它要求我提供安装包的路径。如果我取消此操作,我会看到一个错误对话框,显示“Windows 无法访问指定的设备、路径或文件。您可能没有访问该项目的适当权限。” 错误对话框在对话框的标题栏中包含安装程序的路径,标题栏中的路径指向管理员用户的桌面。
当我以管理员身份运行快捷方式时,应用程序工作正常并且不会启动 Windows 安装程序。如果我完全关闭 UAC,该应用程序也可以正常工作。
请注意,该应用程序是“每台机器”安装的,并且不需要管理员权限即可根据其清单运行。安装程序是使用 Advanced Installer 11.1 Enterprise Edition 创建的。
我已经为 Advanced Installer 的注册表选项卡中的所有注册表项添加了“所有人”的权限。但是,我确实有在安装完成后注册我的 COM dll 的自定义操作,将文件复制到文件系统。几乎不可能为这些密钥提供相同的权限,因为以这种方式注册时会添加很多密钥。
我是否正确地说 Windows Installer 正在修复我的应用程序以便标准用户可以使用它?在我让安装程序完成它的事情后,我必须重新启动我的电脑,重新启动后应用程序也可以正常工作。
我还尝试使用 Microsoft Compatibility Administrator 创建一个 .sdb 来为应用程序设置“RunAsInvoker”兼容性修复程序,这似乎也没有任何效果。此外,我还为我的应用程序使用的所有文件夹和文件提供了“所有人”的完全控制权,这也无济于事。
当我运行 ProcessMonitor 时,我没有看到任何 AccessDenied 错误。所有的注册表访问都设置为 DesiredAccess:Maximum Allowed。大多数注册表访问也指向 HKCU 配置单元,但这是意料之中的,因为我的应用程序中的大多数密钥都驻留在那里。
我在这里遗漏了什么,是否设置了一些我不知道的权限?是否有可能正在修改某些需要管理员权限的注册表值,如果是这样,是否可以允许我的应用程序访问安装程序添加的所有键?由于添加了大约 100 多个键,因此手动设置每个键的权限很痛苦。