1

在管理员帐户上安装我的 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 多个键,因此手动设置每个键的权限很痛苦。

4

2 回答 2

2

实际上,Windows Installer 正在检测非管理员用户缺少组件的关键成员,并尝试启动自动修复。这并没有错,许多安装按用户资源的应用程序都使用这种技术。

问题是您的非管理员用户无权访问安装应用程序的 MSI,因此无法运行修复。这可能是因为:

1)您拥有从高级安装程序生成的安装程序作为 EXE(内部带有 MSI),安装完成后,MSI 和 CAB 文件将被删除。

要解决这种情况,请转到媒体页面并启用“不删除提取的文件”选项。

2)您拥有从高级安装程序生成的安装程序作为 EXE(内部带有 MSI),并且 ts 提取路径设置为每个用户的位置,该位置解析为您的新用户无权访问的管理员用户文件夹。

要解决此问题,请转到媒体页面并将提取文件夹更改为以下内容:

[TempFolder][|Manufacturer][|ProductName] [|ProductVersion]\install

这将使您的 EXE 提取系统 Temp 文件夹中的所有资源,从而使机器上的所有用户、管理员和非管理员都可以访问它。

注意仅当您拥有由 Advanced Installer 生成的 EXE 作为安装包时,上述内容才适用。您可以从上面提到的媒体页面查看 Advanced Installer 生成的包类型。

如果这不能解决问题,您应该自动详细记录(请参阅链接文章的最后一部分)并查看安装程序在您允许它运行后在其中写入的内容,即使用管理员凭据登录。日志应该准确地告诉我们它缺少什么以及 Windows Installer 重新启动 MSI 的原因。

于 2014-07-30T09:50:37.770 回答
-1

Windows Installer 有它自己的指向 Windows Installer 的快捷方式,Windows Installer 启动,检查应用程序,然后启动应用程序。使其成为 Windows 快捷方式。它也会启动得更快。每个人都应该为也使用安装程序快捷方式的办公应用程序执行此操作。所以你需要做的就是做一个正常的快捷方式。

于 2014-07-29T23:31:29.473 回答