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

时间:2014-07-29 11:01:15

标签: windows-7 vb6 installation uac advanced-installer

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

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

请注意,应用程序是“按机器”安装的,并且不需要管理员权限才能根据其清单运行。安装程序是使用Advanced Installer 11.1 Enterprise Edition创建的。

我已为Advanced Installer的注册表标签中的所有注册表项添加了“Everyone”权限。但是,在安装完成后将文件复制到文件系统后,我会执行自定义操作来注册我的COM dll。几乎不可能为这些密钥提供相同的权限,因为以这种方式注册时会添加很多密钥。

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

我还尝试使用Microsoft Compatibility Administrator创建一个.sdb来为应用程序设置“RunAsInvoker”兼容性修补程序,这似乎也没有任何效果。此外,我还给了我的应用程序使用的所有文件夹和文件的“Everyone”FullControl,这也没有做任何事情。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

1)您将Advanced Installer生成的安装程序作为EXE(内置MSI)生成,安装完成后,MSI和CAB文件将被删除。

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

2)您将Advanced Installer生成的安装程序作为EXE(内置MSI)并将ts提取路径设置为每用户位置,该位置解析为新用户没有的admin用户文件夹访问。

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

  

[TempFolder] [|制造商] [| ProductName] [| ProductVersion] \ install

这将使您的EXE在系统Temp文件夹中提取其所有资源,使其可以从计算机,管理员和非管理员访问所有用户。

注意以上仅适用于Advanced Installer生成的EXE作为安装程序包的情况。您可以看到从上面提到的媒体页面生成的高级安装程序包类型。

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

答案 1 :(得分:-1)

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