【发布时间】:2023-03-09 03:43:02
【问题描述】:
我的同事正在尝试通过 RegAsm.exe 注册一些 COM 组件(我编写的),它说他需要管理员权限。他的帐户具有管理员权限,但他没有以管理员身份登录。有没有办法使用他的普通用户帐户并成功完成这项任务?
【问题讨论】:
标签: com
我的同事正在尝试通过 RegAsm.exe 注册一些 COM 组件(我编写的),它说他需要管理员权限。他的帐户具有管理员权限,但他没有以管理员身份登录。有没有办法使用他的普通用户帐户并成功完成这项任务?
【问题讨论】:
标签: com
我工作的环境/管辖区根本不可能向所有用户授予本地管理员访问权限(法律/合规/法规不允许)。
在 .NET 世界中似乎没有与此功能等效的功能:AtlSetPerUserRegistration
试试这个:使用regasm,生成带有/regfile 参数的注册表项。默认情况下,注册表项应使用 HKEY_CLASSES_ROOT (HKCR) 作为根。修改条目(手动或通过脚本)以使用 HKEY_CURRENT_USER (HKCU)。
最后,使用注册表脚本分发您的 .NET DLL。您仍然可以在没有管理员权限的情况下运行 regedit 来注册您的 .NET DLL。从命令行手动、使用批处理文件或(小型)单独的安装程序可以处理注册。
【讨论】:
需要管理员权限才能允许 Regasm.exe 更新注册表。如果这是 UAC 限制,则在桌面上为 cmd.exe 创建一个快捷方式并选中“以管理员身份运行此程序”复选框。或者在 Visual Studio 命令提示符快捷方式上更改此设置,这样更容易。
【讨论】:
为什么不使用registration free com?它自 2003 年以来才受到支持,无需 UAC / 管理访问权限即可安装 COM 组件。
使用 RegFree COM,您可以将 COM dll 与将它们用作私有程序集的应用程序捆绑在一起——但这并不意味着它们无法正确安装——无论是在注册表中还是在最终部署安装时在 WinSxS 中.exe/msi
实际查询的子文本:否 - COM 注册在 HKEY_LOCAL_MACHINE 键中,始终需要管理访问权限。
我撒谎了:其实你可以。如果您创建一个根本没有清单的应用程序,Windows 会推断它是一个 XP 时代的应用程序,它需要管理访问权限才能运行,并将激活一种兼容模式,该模式除其他功能外,还会将对 HKLM 的写访问权限重定向到 HKCU 下的可写位置。因此 COM 组件注册“成功” - 但仅为当前用户注册。
我不确定为什么在兼容性框架之外通常不支持仅注册当前帐户的功能。
【讨论】:
我认为这个问题属于其他地方,但 Windows 使用最低权限,所以如果他是一个既是普通用户又是管理员的用户,那么他将获得普通用户权限。使用 runas 来完成这项工作或右键单击该项目并“以管理员身份运行”
【讨论】:
看看这个:https://gist.github.com/florentbr/6be960752fc852ee99eece6b4acb8ba7 我正试图做同样的事情,当我遇到它时,我正要放弃。
这是一个 cmd 脚本,无需管理员权限即可在注册表中注册 SeleniumBasic.dll。通过一些工作,您应该能够重新利用代码来注册您的 COM 组件。
非常感谢 Florent Breheret 为 SeleniumBasic 和这个 cmd 脚本注册它!
【讨论】:
我已登录具有管理员权限的帐户。但是 RegAsm.exe 仍然说它需要管理员权限。
[来自我的一些笔记 Windows 2008 R2。 在支持 UAC 的其他 Windows 操作系统上确认。以下假设允许您更改 本地安全政策。 ]
在其默认配置中,用户帐户控制 (UAC) 设置赋予本地管理员完全权限,但限制管理员组其他成员的权限。要解除对管理员组其他成员的 UAC 限制,请执行以下操作:
【讨论】: