【问题标题】:What permissions/rights are needed to run regsvr32 /s /c "myocx.ocx"运行 regsvr32 /s /c "myocx.ocx" 需要哪些权限/权限
【发布时间】:2010-10-08 19:50:20
【问题描述】:

我将 WindowsXP 配置为构建机器。构建过程在不是管理员的帐户下运行。

一些项目在最后一步注册一个 ocx 控件,例如

regsvr32 /s /c ".\debug\myocx.ocx"

此步骤失败,我认为这与权限有关,因为在管理员帐户下执行相同操作可以正常工作。

我需要为构建帐户提供哪些权利/权限/政策?我应该在哪里进行? (浏览本地用户和组以及本地安全设置对我没有帮助)

【问题讨论】:

    标签: ocx regsvr32


    【解决方案1】:

    您需要通过 regedit 授予“HKEY_CLASSES_ROOT”的构建帐户权限。

    右键单击 HKEY_CLASSES_ROOT 并选择权限...完全控制。

    【讨论】:

    • 你刚刚保存了我的构建机器脚本!谢谢。 (我有一个旧的 COM 对象,我注册(然后构建 dotnet 代码)注销。
    • 首先备份您的系统。不知道为什么,但是在将 HKEY_CLASSES_ROOT 的完全控制权授予网络服务帐户后,我的 windows 2008 R2 服务器完全损坏且无法使用。
    • 这解决了我从 finalbuilder 注册 OCX 的问题。在提升的命令行上注册很好,但从 finalbuilder (作为管理员)失败。更改注册表中的权限就可以了。
    【解决方案2】:

    注册 OCX 归结为在 HKLM 下的注册表中写入条目。默认情况下,非管理员帐户在那里没有权限,我不太确定您的构建帐户是否应该(在我的书中,调试 OCX 的安装仍然是“安装”(相对于构建))。

    【讨论】:

      【解决方案3】:

      无需管理员身份即可为 regsvr32 应用权限的 PowerShell 脚本

      虽然可以只使用grant full control of the HKCR key,但这可能会导致授予不必要的访问权限。在研究如何做到这一点时,有一次我最终获得了 HKCR 的权限,导致需要重新映像我的机器。为了想出这个脚本,我使用了procmon 工具,并过滤了注册表权限被拒绝,然后在脚本中授予它们。

      以下 PowerShell 脚本仅在我确定注册 DLL(以及 OCX)所需的那些密钥上创建(非继承)权限。这允许单个帐户(在本例中为构建服务器代码构建器帐户)被授予注册 DLL 的访问权限,而无需成为管理员。将第一个变量 - $buildAcctUserName - 替换为设置规则时要使用的帐户。

      $buildAcctUserName = "AzureDevOpsBuilder"
      
      # Create Rule for full control of keys that need to be added to/updated/deleted from
      $user = New-Object System.Security.Principal.NTAccount("$($env:COMPUTERNAME)\$buildAcctUserName")
      $rule = New-Object System.Security.AccessControl.RegistryAccessRule(
        $user, 
        [System.Security.AccessControl.RegistryRights]"FullControl", 
        [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit",  <# ContainerInherit / None / ObjectInherit #>
        [System.Security.AccessControl.PropagationFlags]::None, 
        [System.Security.AccessControl.AccessControlType]::Allow)
      
      # Grant access to HKCR
      $regHKCRHive=[Microsoft.Win32.RegistryHive]::ClassesRoot;
      $regHKCRBaseKey=[Microsoft.Win32.RegistryKey]::OpenBaseKey($regHKCRHive,[Microsoft.Win32.RegistryView]::Default)
      $regkey=$regHKCRBaseKey.OpenSubKey("", $true) 
      $acl = $regkey.GetAccessControl()
      $acl.SetAccessRule($rule)
      $regkey.SetAccessControl($acl)
      
      # Grant access to HKLM\Software
      $regHKLMHive=[Microsoft.Win32.RegistryHive]::LocalMachine
      $regHKLMBaseKey=[Microsoft.Win32.RegistryKey]::OpenBaseKey($regHKLMHive,[Microsoft.Win32.RegistryView]::Default)
      $regkey=$regHKLMBaseKey.OpenSubKey("SOFTWARE", $true) 
      $acl = $regkey.GetAccessControl()
      $acl.SetAccessRule($rule)
      $regkey.SetAccessControl($acl)
      
      # Grant access to HKLM\Software\Wow6432Node
      $regkey=$regHKLMBaseKey.OpenSubKey("SOFTWARE\Wow6432Node", $true) 
      $acl = $regkey.GetAccessControl()
      $acl.SetAccessRule($rule)
      $regkey.SetAccessControl($acl)
      
      # Grant access to HKCR\Wow6432Node\CLSID
      $regkey=$regHKCRBaseKey.OpenSubKey("Wow6432Node\CLSID", $true) 
      $acl = $regkey.GetAccessControl()
      $acl.SetAccessRule($rule)
      $regkey.SetAccessControl($acl)
      
      # Grant access to HKCR\TypeLib
      $regkey=$regHKCRBaseKey.OpenSubKey("TypeLib", $true) 
      $acl = $regkey.GetAccessControl()
      $acl.SetAccessRule($rule)
      $regkey.SetAccessControl($acl)
      
      # Grant access to HKCR\Wow6432Node\Interface
      $regkey=$regHKCRBaseKey.OpenSubKey("Wow6432Node\Interface", $true) 
      $acl = $regkey.GetAccessControl()
      $acl.SetAccessRule($rule)
      $regkey.SetAccessControl($acl)
      
      # Grant access to HKCR\Interface
      $regkey=$regHKCRBaseKey.OpenSubKey("Interface", $true) 
      $acl = $regkey.GetAccessControl()
      $acl.SetAccessRule($rule)
      $regkey.SetAccessControl($acl)
      
      # Grant access to HKCR\AppID
      $regkey=$regHKCRBaseKey.OpenSubKey("AppID", $true) 
      $acl = $regkey.GetAccessControl()
      $acl.SetAccessRule($rule)
      $regkey.SetAccessControl($acl)
      

      【讨论】:

        【解决方案4】:

        请检查 regsvr32 中给出的错误消息

        http://support.microsoft.com/kb/249873

        我也不确定 /c 开关..

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2014-08-28
          • 2015-12-28
          • 1970-01-01
          • 1970-01-01
          • 2023-04-06
          • 2020-04-06
          • 2016-07-15
          • 2012-03-11
          • 2019-08-23
          相关资源
          最近更新 更多