2017-07-13 52 views
2

異なるユーザーとして実行されているPowerShell 5.1(x86)でInterop.DSOFile.dll関数とクラスを使用する場合、このエラーが発生します。私が使用しているアカウントは、dllを含むフォルダへの完全な権限を持つAD機能アカウントです。私は必要な仕事のために自分のADアカウントよりもアクセスが多いので、このアカウントを使用する必要があります。0引数を持つ.ctorを呼び出す例外:CLSID {ID}のコンポーネントのCOMクラスファクトリを取得できませんでした。 HRESULT:0x80070005(E_ACCESSDENIED)

私は自分のユーザーアカウントで問題なく実行できますが、機能アカウントを使用しようとすると、タイトルにエラーが表示されます。

[System.Reflection.Assembly]::LoadFrom('C:\Path\To\Interop.DSOFile.dll') 

New-Object DSOFile.OleDocumentPropertiesClass 
エラーになり

New-Object : Exception calling ".ctor" with "0" argument(s): "Retrieving the COM class factory for component with CLSID {58968145-CF05-4341-995F-2EE093F6ABA3} failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))." At line:1 char:1 + New-Object DSOFile.OleDocumentPropertiesClass + CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvoca tionException + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.Power Shell.Commands.NewObjectCommand

私はCLSIDが存在することを確認し、私は、機能のアカウントを使用してそれを見ることができ、それはそこにある:

gci 'HKLM:\SOFTWARE\Classes\CLSID' | ?{$_.PSChildName -match '58968145-CF05-4341-995F-2EE093F6ABA3'} 

Property  : {(default)} 
PSPath  : 
Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE 
      \Classes\CLSID\{58968145-CF05-4341-995F-2EE093F6ABA3} 
PSParentPath : 
Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE 
      \Classes\CLSID 
PSChildName : {58968145-CF05-4341-995F-2EE093F6ABA3} 
PSDrive  : HKLM 
PSProvider : Microsoft.PowerShell.Core\Registry 
PSIsContainer : True 
SubKeyCount : 2 
View   : Default 
Handle  : Microsoft.Win32.SafeHandles.SafeRegistryHandle 
ValueCount : 1 
Name   : HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{58968145-CF05-4341-9 
      95F-2EE093F6ABA3} 

私はDcomcnfg.exe \ DCOM Configを使用してアカウントにアクセスするのと同様のStackoverflow質問からのソリューションを使用しようとしました。 COM +の設定

  • ゴーコントロールパネル] - > [管理] - > [コンポーネントサービス] - > [DCOMの構成
  • Microsoft Wordを開き97から2003のプロパティ
  • 一般 - >認証レベル:なし
  • セキュリティ - >すべてのユーザーを許可する3つのアクセス許可をすべてカスタマイズする

ローカル管理者グループにもAD機能アカウントを追加しましたが、成功しませんでした。

+2

このアカウントには、レジストリキーを読み取るための十分な権限がありますか?私はマイクロソフト(sysinternals)からprocmonをダウンロードし、実行し、コードを実行し、停止し、アクセス違反を検索します*(またはあなたのために最も効果的な何かをフィルタリングまたはカウントする)* –

+0

Thanks Lieven、答え。 –

答えて

1

Lieven Keersmaeker's procmonのデバッグのおかげで、私はこの問題を解決できました。

解決された登録済みのDLLは、私の古いADアカウントフォルダの下の暗号化されたフォルダにありました(私のAD sAMAccountは最近変更されました)。私はレジストリでdllを見つけ出し、このdllのよりアクセスしやすいコピーへのパスを変更しました。これは完全に動作します!

この前に私はこの問題を適切にデバッグする方法を知りませんでしたし、dllがWindowsによってどのように解決されたのか正確には分かりませんでした。私はdll、この場合dsofile.dllがInterop.DSOFile.dllと同じディレクトリにあって、レジストリに手を差し伸べるのではなく、同じディレクトリにあるファイルを解決すると仮定しました。私は今よく知っている。

+0

"疑わしいときはprocmonを実行してください"。あなたはそれを解決することができてうれしいです。 –

関連する問題