10

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

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

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

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

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

4

4 回答 4

12

通过 regedit,您需要在“HKEY_CLASSES_ROOT.

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

于 2009-02-20T12:30:23.340 回答
1

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

于 2009-02-20T12:07:26.423 回答
0

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

虽然可以只授予对 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)
于 2020-01-24T20:01:18.433 回答
-1

请检查 regsvr32 的错误消息,如

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

而且我也不确定 /c 开关..

希望这可能会有所帮助。

于 2009-02-20T11:50:18.680 回答