2011-09-29 27 views
2

我完成一项任务没有提示批准安装windows加载项应用一个普通用户的弹出(UAC),而安装过程中使用注册.NET程序集管理员权限instalshield。在Windows XP上,它的工作正常,但在安装Vista和Windows 7时,会弹出一个批准窗口。根据要求,它不应该来。如果UAC打开,是否有任何方法绕过vista和windows 7上的弹出窗口,并且在没有管理员权限的情况下为每个用户注册了程序集?如何注册每个用户的互操作.NET asssembly没有使用InstallShield

请帮忙吗?

谢谢。

+0

您是否需要注册这些程序集?我以为他们可以进入bin文件夹。 –

+0

我们有一个项目(类库),用于将图表从网络导出到ms word,excel,powerpoint。我们需要将该项目(project.dll)dll注册到Windows注册表中。我们正在使用installshield进行此操作。 – Tarun

+0

如果没有通过UAC提示,您无法修补用户的注册表。此提示并非旨在阻止您执行您想要执行的操作,而只是为了让用户意识到您正在对其计算机配置进行永久更改。除非意图是恶意的,否则没有任何理由隐瞒事实。 –

回答

4

实际上,COM可以注册为每个用户或每台机器,因为HKEY_CLASSES_ROOT是从HKEY_CURRENT_USER \ Software \ Classes和HKEY_LOCAL_MACHINE \ Software \ Classes派生的视图。如果您运行regasm /regfile:foo.dll,您可以生成一个regfile,然后更改所有关键名称中的引用,使其成为本地用户。

在获取生成.reg文件,所有的REG键增加将是HKEY_CLASSES_ROOT。您需要将其替换为“HKEY_CURRENT_USER \ Software \ Classes”。

此外,如果您需要COM注册才能使用32位应用程序,并且您正在运行x64,那么对于HKEY_CLASSES_ROOT \ CLSID的添加,您需要在CLSID令牌之前插入“\ Wow6432Node”。

要清楚,添加到“HKEY_CLASSES_ROOT \ CLSID”变为“HKEY_CURRENT_USER \ Software \ Classes \ Wow6432Node \ CLSID”。要使其在x86上工作,只需对CLSID条目进行此更改即可。

此外,在某些情况下,您可以考虑使用免注册COM Interop,方法是为EXE创建一个清单文件,该文件使用COM服务器以使EXG可以使用ProgID/ClassID,而无需实际将注册信息写入注册表。

+0

我已经使用该dll的regasm生成了reg文件。何时以及如何需要更改键名称中的引用。在安装过程中吗? Plz提供了与免费注册COM相关的示例? – Tarun

+0

它在.reg文件中的[HKEY_LOCAL_MACHINE]中的任何位置将其更改为[KEY_CURRENT_USER]。 http://msdn.microsoft.com/en-us/library/ms973913.aspx –

+0

是否有任何自动化的方式来更改产品安装过程中的密钥名称? – Tarun

1

这是开发商这是不熟悉的高程和用户权限的通病。

您正在安装的部件是按机器注册的。这就是为什么它需要提高注册过程。它在XP上也提升了,但是你不知道是否因为它是自动的。如果您要在普通用户帐户下运行安装,则由于权限不足而导致安装失败。

由于本次大会的目的是每台机器要登记,为什么你想改变自己的行为?这就像试图修改Windows以支持您的应用程序。你适应环境,而不是相反。

所以正确的方法是使用每台机器安装。这样您的安装过程将为所有用户安装,并且始终需要管理员权限。

每用户安装专为仅利用每个用户位置的产品。如果您要在每台计算机位置安装资源,则应使用每台计算机的安装。

+0

如果我们使用每台机器安装,那么如何避免UAC的审批弹出? – Tarun

+1

你没有。每台机器安装需要提升。 –