2012-02-01 17 views
1

私の顧客の1人は、WindowsサービスをC#で作成しています。それは多くのものをチェックしますが、1つのことは、プリンタポ​​ート(IPアドレス)がすでに存在するかどうかを確認することです。はいの場合は、特定のプリンタをip-portに接続します。いいえの場合は、ポートを作成して接続してください。WMIを使用したWindowsサービス

私はWMIを使用して既存のプリンタポ​​ートを確認し、それらを作成します。また、WMIを使用してプリンタをプリンタポ​​ートに接続します。

Windows 7では、これは魅力的です。しかし、私の(仮想)XPマシンでは、サービスはWMIの権利を全く持たないようです。ポートチェックが失敗し、作成が失敗します。 ManagementExceptionからの単純な「アクセス拒否」が与えられます。

私はちょっとしたテストプログラム(C#のコンソールアプリケーション)を作っても、それは魅力のように機能します。

私は、別のアカウント(ローカルシステム、管理者、管理者権限を持つ私の個人ログイン)でサービスを実行しようとしましたが、何も動作していないように見え、Windows XPのWindowsサービスでWMIを使用できないと感じています。

この問題を解決する手掛かりはありますか?またはここで何が間違っていますか?

答えを探す場所がわからないので、私はあなたに正しい答えを見つけることを望んで、ここにアカウントを作成しました。

答えて

0

Win32_Printerを使用していますか? Win32_Printerリファレンスページでは、それは言う、

備考

のWin32_PrinterクラスがCIM_Printerから派生しています。 Win32_Printerインスタンスに対してSWbemObject.Put_またはIWbemServices :: PutInstanceを呼び出す前に、SeLoadDriverPrivilege特権(Visual Basicの場合はwbemPrivilegeLoadDriver、モニカをスクリプト化する場合はLoadDriver)を有効にする必要があります。詳細については、「特権定数」および「特権操作の実行」を参照してください。次のVBScriptのコード例は、スクリプトでSeLoadDriverPrivilege特権を有効にする方法を示しています。

編集:サービスに関しては、Windows Server 2003とServer 2008の違いがわかります。古いオペレーティングシステム(おそらくXPが含まれている)では、ユーザーのプロファイルはデフォルトでは読み込まれません。これはDPAPI APIを使用しようとすると問題が発生します。おそらく、このような状況で類似のものが発生している可能性があります。唯一の推測。

編集:WMIに接続するときに偽装を有効にしていることを確認します。 Win32_TCPIPPrinterPortページの例があります。あなたが試みることができる二つのことは、あなたがしようとすると、他のアプローチは、いくつかの偽装詐欺にあなたの全体のコードをラップすることによって可能性があり

ConnectionOptions options = new ConnectionOptions(); 
options.Username = userName; 
options.Password = password; 
options.EnablePrivileges = true; 

あなたConnectionOptions上のいくつかの資格情報を設定することができますが、まず第一に、そこ

ConnectionOptions options = new ConnectionOptions(); 
options.Impersonation = System.Management.ImpersonationLevel.Impersonate; 

ManagementScope scope = new ManagementScope(@"\\root\\cimv2", options); 
scope.Connect(); 
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_TCPIPPrinterPort where HostAddress = '" + printerPort + "'"); 
+0

はい、私はWIN32_Printerを使用します。しかし、それは同じXPコンピュータ上のコンソールアプリケーションから動作します。 – Aspage

+0

修正:WMIのWin32_Printer 'folder/class'を参照するWMIを使用します。私は、Win32_Printerを直接使って物事を終わらせるわけではありません。 – Aspage

+0

Win32_PrinterはWMIクラスです。 Win32_Printerを使用していない場合は、どのWMIクラスが使用していますか? –

関連する問題