gpt4 book ai didi

windows - 自动安装 DCOM 并配置其启动设置

转载 作者:可可西里 更新时间:2023-11-01 10:44:06 27 4
gpt4 key购买 nike

我有一个第 3 方 DCOM 组件,我需要在我的安装程序中以自动方式安装和配置其启动设置(无需用户干预)。我使用 regsvr32.exe 进行 .dll 注册并使用 powershell 设置启动设置。这是我的注册命令行:

regsvr32.exe /n /i:"C:\ProgramData\my3rdparty" "C:\Program Files (x86)\My3rdparty\engine.dll"

这是我的 powershell:

$Group = 'IIS_IUSRS'
$SystemInfo = (Get-WmiObject -Class Win32_ComputerSystem)
$ComputerName = "{0}.{1}" -f $SystemInfo.Name, $SystemInfo.Domain
$Domain = $SystemInfo.Name
$ComComponentName = 'My 3rd party DCOM name'


function New-DComLaunchACE(
[parameter(mandatory=$true)] $Domain,
[parameter(mandatory=$true)] $ComputerName,
[parameter(mandatory=$true)] $Group )
{

#Create the Trusteee Object
$Trustee = ([WMIClass] "root\cimv2:Win32_Trustee").CreateInstance()

#Search for the user or group, depending on the -Group switch
$account = [WMI] "root\cimv2:Win32_Group.Name='$Group',Domain='$Domain'"

#Get the SID for the found account.
$accountSID = [WMI] "root\cimv2:Win32_SID.SID='$($account.sid)'"

#Setup Trusteee object
$Trustee.Domain = $Domain
$Trustee.Name = $Group
$Trustee.SID = $accountSID.BinaryRepresentation

#Create ACE (Access Control List) object.
$ACE = ([WMIClass] "root\cimv2:Win32_ACE").CreateInstance()

# COM Access Mask
# Execute = 1,
# Execute_Local = 2,
# Execute_Remote = 4,
# Activate_Local = 8,
# Activate_Remote = 16
$ACE.AccessMask = 11 # Execute | Execute_Local | Activate_Local
$ACE.AceFlags = 0
$ACE.AceType = 0 # Access allowed
$ACE.Trustee = $Trustee
$ACE
}

function New-DComConfigurationACE(
[parameter(mandatory=$true)] $Domain,
[parameter(mandatory=$true)] $ComputerName,
[parameter(mandatory=$true)] $Group )
{

#Create the Trusteee Object
$Trustee = ([WMIClass] "root\cimv2:Win32_Trustee").CreateInstance()

#Search for the user or group, depending on the -Group switch
$account = [WMI] "root\cimv2:Win32_Group.Name='$Group',Domain='$Domain'"

#Get the SID for the found account.
$accountSID = [WMI] "root\cimv2:Win32_SID.SID='$($account.sid)'"

#Setup Trusteee object
$Trustee.Domain = $Domain
$Trustee.Name = $Group
$Trustee.SID = $accountSID.BinaryRepresentation

#Create ACE (Access Control List) object.
$ACE = ([WMIClass] "root\cimv2:Win32_ACE").CreateInstance()

# COM Access Mask
$ACE.AccessMask = 268435456 # Full Control
$ACE.AceFlags = 0
$ACE.AceType = 0 # Access allowed
$ACE.Trustee = $Trustee
$ACE
}

# Configure the DComConfg settings for the component so it can be activated & launched locally
$dcom = Get-WMIObject Win32_DCOMApplicationSetting -Filter "Description='$ComComponentName'" -EnableAllPrivileges


if ($dcom -ne $null)
{
write-host "DCOM is registered! Setting up permissions"

$sd = $dcom.GetLaunchSecurityDescriptor().Descriptor
$csd = $dcom.GetConfigurationSecurityDescriptor().Descriptor

#$nsAce = $sd.Dacl | Where {$_.Trustee.Name -eq $Group}

$newAce = New-DComLaunchACE -Domain $Domain -ComputerName $ComputerName - Group $Group
$sd.Dacl += $newAce

$newAce2 = New-DComConfigurationACE -Domain $Domain -ComputerName $ComputerName -Group $Group
$csd.Dacl += $newAce2

# Set both the launch and the configuration descriptors ...
$dcom.SetLaunchSecurityDescriptor($sd)
$dcom.SetConfigurationSecurityDescriptor($csd)

}
else
{
Write-Host "DCOM not found."
}

我的问题是,即使已成功注册,Powershell 脚本也找不到 DCOM 组件。

但是,我发现如果我用

打开 mmc 控制台
mmc comexp.msc /32

然后导航到“DCOM Config”文件夹 - 我可以在那里看到我的 Dcom 组件......如果我在那之后运行我的 powershell 脚本 - 它可以工作!

screenshot of component services window

安装新的 DCOM 时,系统似乎正在缓存中搜索而不更新缓存。打开 mmc 控制台时 - 系统正在刷新缓存并且 dcom 可用。但这些都是我的假设。

我做错了什么吗?如何确保 DCOM 在安装后立即可供 powershell 脚本使用?

非常感谢!

最佳答案

我们在这里发布了一些有趣的信息,似乎是您在 64 位系统上执行 32 位(假设所有现代系统都是 64 位):https://msdn.microsoft.com/en-us/library/windows/desktop/ms678426(v=vs.85).aspx

因此,请尝试从以下位置运行它,而不是以下内容(添加只是为了表明似乎与您注意到的解决方案相关的问题):C:/windows/syswow64/regsvr32.exe

Dcomcnfg.exe 和 64 位应用程序

在从 Windows XP 到 Windows Server 2008 的 x64 操作系统上,64 位版本的 DCOMCNFG.EXE 无法正确配置 32 位 DCOM 应用程序以进行远程激活。此行为会导致本应远程激活而不是本地激活的组件。此行为不会发生在 Windows 7 和 Windows Server 2008 R2 及更高版本中。解决方法是使用 32 位版本的 DCOMCNFG。运行 32 位版本的 mmc.exe 并使用以下命令行加载 32 位版本的组件服务管理单元。

C:\WINDOWS\SysWOW64>mmc comexp.msc/32

32 位版本的组件服务正确注册 32 位 DCOM 应用程序以进行远程激活。

关于windows - 自动安装 DCOM 并配置其启动设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817061/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com