作为标准用户在Windows Vista上安装VB6

作为标准用户在Windows Vista上安装VB6,vb6,windows-vista,Vb6,Windows Vista,我有一个VB6应用程序,需要作为标准用户安装在Windows Vista上。我使用VisualStudio2005创建了一个安装项目,将应用程序放置在标准的用户安全位置或文件夹中。我也有一个dll,我想安装和注册到用户应用程序数据文件夹。在VS'05中创建windows installer后,我使用msinfo.exe翻转了“字数属性”的第3位,以便Vista在运行msi时不会提示管理员凭据。在尝试将dll注册到“用户”应用程序数据文件夹之前,应用程序不会出现任何问题。当它到达该点时,会抛出一个

我有一个VB6应用程序,需要作为标准用户安装在Windows Vista上。我使用VisualStudio2005创建了一个安装项目,将应用程序放置在标准的用户安全位置或文件夹中。我也有一个dll,我想安装和注册到用户应用程序数据文件夹。在VS'05中创建windows installer后,我使用msinfo.exe翻转了“字数属性”的第3位,以便Vista在运行msi时不会提示管理员凭据。在尝试将dll注册到“用户”应用程序数据文件夹之前,应用程序不会出现任何问题。当它到达该点时,会抛出一个错误,说明它无法为dll注册类型库。安装程序似乎没有将dll注册到用户文件夹的权限。这是正确的吗?我的理解是,Vista只抱怨标准用户更新或更改影响机器所有用户的项目。有什么想法吗?思想?建议?

注册DLL会影响所有用户(DLL是全局注册的),因此需要管理员权限。这是没有办法的

对于较新的编程环境,解决方案是不需要注册DLL即可使用。然而,由于vb6依赖COM,您可能运气不好。

大体上我同意他在回答中所说的

但是,了解注册表在这方面的工作方式后,我可以建议您尝试手动将DLL注册到
HKEY\U CURRENT\U USER\SOFTWARE\Classes
,基本上重复regsvr32.exe对
HKEY\U LOCAL\U MACHINE\SOFTWARE\Classes
所做的操作

这有点像黑客,也许不管用,但你可以试试

  • MSDN上的相关帖子:(感谢MarkJ在评论中指出这一点)
  • vbforums.com上的相关帖子:

您可以使用RegFree COM,而不是直接注册DLL文件

这涉及到为应用程序创建XML清单文件,因此Windows将在应用程序文件夹中查找DLL文件,而不是使用系统注册表查找它们

这意味着您的应用程序将正常运行,而无需安装程序注册DLL

这些链接包含更多信息:

您可以使用free Make My Manifest软件创建所需的清单文件:

史蒂夫

我的建议是,如果您能够的话,使用regfree com/manifest文件,而不是注册ocx/dll文件,正如您所提到的,在基本用户帐户下,这是一件非常麻烦的事情

这里有一个优秀的免费应用程序,您也可以使用它为您构建清单:

我们已经使用它几年了,没有任何问题

编辑MMM网站已关闭。我看到作者在托管方面遇到了问题,并提供了另一个位置来获取我的清单-

  • 免费注册COM:广受好评。它是一个为VB6项目创建清单的自动工具:我自己还没有尝试过
  • 是无注册COM的替代方案。它也有粉丝,我也没试过
编辑MMM网站已关闭。我看到作者在托管方面遇到了问题,并提供了另一个位置来获取我的清单-


有一种半自动技术可以为无注册表COM创建清单。您可以使用VisualStudio2008创建清单(您可以使用像Visual Basic Express Edition这样的免费版本)。然后手动进行一些编辑,使清单适合从VB6使用。请参阅本MSDN文章的第1部分,了解分步说明-忽略文章中关于ClickOnce的其余部分。

是MMM的翻版,可用于在自动生成中生成清单。它使用脚本文件添加依赖的COM组件。

+1我可以建议您编辑您的答案,并提及按照Onernerd的建议制作清单吗?msdn关于RegFree COM的文章中说:事实上,Reg Fielm COM的最初意图是启用现有的本地应用程序,例如用Visual Basic 6、C++或某些语言组合编写的应用程序。“我在VB6 RegFree com上找不到任何东西……有任何链接吗?关于您关于将dll注册到HKLU而不是HKLM的评论,我已经尝试过了。使用orca编辑msi,我已将注册表项根列设置为1。但当我这样做时,msi未通过ice验证检查。我想我会尝试一下xml清单…强烈建议使用reg free COM而不是尝试这个,这听起来很不确定,正如我所说的-这有点像黑客,但值得一试。事实上,我现在要放弃并+1这个!我刚刚在MSDN中找到一个参考资料,上面说您可以在HKEY_CURRENT_用户中注册COM服务器。这比那篇文章更具权威性。顺便说一句,我相信这是Windows 2000中的新功能。我同情任何与此相关的人。:)不太走运。。。事实上,这就是注册免费COM的目的。。。与本MSDN条目中记录的其他回答一样,COM在查看计算机范围内的HKEY_类根之前,先查看HKEY_当前用户\软件\类。我冒昧地给这个“regfreecom”贴上标签,因为我认为这将是问题的正确答案。我意识到这可能有点早,因为史蒂文还没有尝试过…@MarkJ:我认为你不应该到处用你认为正确的答案来标注问题。这不是标签的用途,这是答案的用途。似乎Reg free COM仅适用于.NET程序集中的COM引用。@Tomalak。谢谢你的反馈。事实上,reg free COM也适用于从VB6客户端使用的COM引用,例如,MakeMyManifest工具仅适用于VB6客户端。或者阅读我的答案中提到的文章。你也可以将MMM包打包为每用户MSI(WordCount位翻转),以创建开始菜单快捷方式,等等