Windows 7 VB6应用程序Windows 7安装后无法为标准用户正常工作

Windows 7 VB6应用程序Windows 7安装后无法为标准用户正常工作,windows-7,vb6,installation,uac,advanced-installer,Windows 7,Vb6,Installation,Uac,Advanced Installer,在管理员帐户上安装VB6应用程序后,我希望在标准用户帐户上运行它。双击快捷方式Windows Installer后立即启动,它要求我提供安装包的路径。如果取消此操作,我将看到一个错误对话框,上面显示“Windows无法访问指定的设备、路径或文件。您可能没有访问该项目的适当权限。”错误对话框的标题栏中包含安装程序的路径,标题栏中的路径指向管理员用户的桌面 当我以管理员身份运行快捷方式时,应用程序工作正常,不会启动Windows Installer。如果我完全关闭UAC,应用程序也可以正常工作 请注

在管理员帐户上安装VB6应用程序后,我希望在标准用户帐户上运行它。双击快捷方式Windows Installer后立即启动,它要求我提供安装包的路径。如果取消此操作,我将看到一个错误对话框,上面显示“Windows无法访问指定的设备、路径或文件。您可能没有访问该项目的适当权限。”错误对话框的标题栏中包含安装程序的路径,标题栏中的路径指向管理员用户的桌面

当我以管理员身份运行快捷方式时,应用程序工作正常,不会启动Windows Installer。如果我完全关闭UAC,应用程序也可以正常工作

请注意,应用程序是“每台机器”安装的,不需要管理员权限即可根据其清单运行。安装程序是使用Advanced installer 11.1 Enterprise Edition创建的

我已经为“高级安装程序”的“注册表”选项卡中的所有注册表项添加了“所有人”权限。但是,我有一些自定义操作,在安装完成后将文件复制到文件系统中,注册我的COM dll。这几乎不可能赋予这些密钥相同的权限,因为以这种方式注册时会添加相当多的密钥

我说Windows Installer正在修复我的应用程序以便标准用户可以使用它,对吗?在我让安装程序完成它的工作后,我必须重新启动我的电脑,重新启动后,应用程序也可以正常工作

我还尝试使用Microsoft Compatibility Administrator创建一个.sdb来设置应用程序的“RunAsInvoker”兼容性修复程序,这似乎也没有任何效果。此外,我还让“每个人”完全控制我的应用程序使用的所有文件夹和文件,这也没有任何作用

当我运行ProcessMonitor时,我没有看到任何AccessDenied错误。所有注册表访问权限都设置为DesiredAccess:允许的最大值。大多数注册表访问也指向HKCU配置单元,但这是预期的,因为我的应用程序中的大多数键都驻留在那里


我是否遗漏了什么,是否有一些我不知道的权限正在设置?是否可能正在修改某些需要管理员权限的注册表值,如果是,是否允许我的应用程序访问安装程序添加的所有键?手动设置每个键的权限是一件痛苦的事情,因为添加了大约100多个键。

Windows Installer有自己的快捷方式,指向Windows Installer,Windows Installer启动,勾选应用程序,然后启动应用程序。将其设置为Windows快捷方式。它也会启动得更快。对于同样使用安装程序快捷方式的office应用程序,每个人都应该这样做。因此,您只需创建一个正常的快捷方式。

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

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

1) 您已将从高级安装程序生成的安装程序作为EXE(其中包含MSI),安装完成后,MSI和CAB文件将被删除

要解决此问题,请转到“媒体”页面并启用“不删除提取的文件”选项

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

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

[临时文件夹][|制造商][|产品名称][|产品版本]\install

这将使您的EXE提取系统临时文件夹中的所有资源,使计算机上的所有用户、管理员和非管理员都可以访问它

注意仅当高级安装程序生成EXE作为安装程序包时,上述内容才适用。您可以在上面提到的媒体页面中看到高级安装程序生成的包类型


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

一些安装程序可以选择创建“自我修复”安装,在应用程序启动时纠正注册表问题。听起来像是那种功能,它不会看到HKCU密钥,因为它们只是为管理员帐户创建的,而不是为标准用户创建的。快捷方式可能是按照广告安装的。这条捷径指向什么?您是否尝试过直接(在标准用户上下文中)运行目标可执行文件?我相信,当我不以管理员身份在标准帐户上运行应用程序时,Windows Installer确实在修复某些东西。我可以确认正在查找的第一个注册表值位于HKLM配置单元中。我还可以确认,在高级安装程序中,不会公布快捷方式。快捷方式指向程序文件(x86)中的应用程序目录。快捷方式目标正确指向可执行文件。当直接运行可执行文件时,我得到完全相同的结果。有趣的是,如果我有两个管理员帐户,当其中一个安装应用程序时,这两个帐户都可以运行应用程序,而不必以管理员身份运行