运行regsvr32 / s / c“myocx.ocx”需要哪些权限/权限

时间:2009-02-20 11:30:41

标签: ocx regsvr32

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

有些项目将ocx控件的最后一步注册为

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

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

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

4 个答案:

答案 0 :(得分:11)

通过regedit,您需要在“HKEY_CLASSES_ROOT”上提供构建帐户权限。

右键单击HKEY_CLASSES_ROOT并选择Permissions ... Full Control。

答案 1 :(得分:1)

注册OCX归结为在HKLM下的注册表中编写条目。默认情况下,非管理员帐户没有权限,我不太确定您的构建帐户应该是什么(在我的书中安装调试OCX仍然是“安装”(v.s. building))。

答案 2 :(得分:0)

请检查

中给出的regsvr32的错误消息

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

我也不确定/ c切换..

希望这可能会有所帮助。

答案 3 :(得分:0)

PowerShell脚本,无需管理员即可对regsvr32应用权限

虽然可能只是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)