1

サービスをリモートで作成する必要があり、コマンドに分割して "sc \remotemachine create ......" を実行したくなく、C# コード内で実行したいと考えています。

ただし、コードを実行すると、sc コマンドが正常に機能し、リモート システムを管理しているにもかかわらず、ManagementScope.Connect 呼び出しで「RPC サーバーが利用できません」という例外がスローされます。

これを行うコードのスニペットは次のとおりです。

string machineName = "othermachine";
string path = string.Format(@"\\{0}\root\cimv2", machineName);
ManagementScope scope = new ManagementScope(path);
scope.Connect();

これは旅の最初の一歩なので、次はどこに行こうか迷っています。sc コマンドは機能しますが、何が違うのですか (.net ライブラリを使用しないこと以外に、おそらく winapi をもっと強くする必要がありますか?)

ありがとう

4

2 に答える 2

2

このタスクに割り当てられた時間が侵食されているのを見て、これを少し考えた後、古い WIN32 API ドキュメントを入手し、これを行うために必要な呼び出しを「昔ながらの方法」で [DllImport] しました。古い C の犬である私は、これらの呼び出しを回避する方法を知っていました。管理されたライブラリをかなりの数年間使用した後でも、驚くほど多くの呼び出しが返されます。

私がする必要があったのは、サービスを作成し、起動し、有用な作業を行い、停止し、削除できるようにすることでした。作成、開始、停止、および削除はメカニズムであり、アクティビティの「役立つ作業を行う」部分に集中したかったのです。

最初にサービスの exe を ADMIN$ 共有にコピーし、そのローカル パスを確認しました (サーバー管理者にはわかりません!)。これを行うには、私は呼び出します

["netapi32.dll"]NetShareGetInfo 

そして、私は advapi32.dll から以下を使用しました

  • OpenSCマネージャー
  • CreateService
  • StartService
  • OpenService(停止して削除したい場合-ハンドルを開いたままにしないでください。これには時間がかかる場合があるため、物事を自己完結型に保つためにクリーンになります)
  • コントロールサービス
  • QueryServiceStatus
  • CloseServiceHandle

これはすべて、VPN 接続を介しても機能します。

マネージド API が実際に必要とするよりもはるかに多くのことを行おうとしていると推測することしかできません。マネージド API と Windows API の使用にかかる時間の差は非常に大きく、マネージド API がそれを通過するという保証はありませんでした。適切な方法ではありません。

于 2010-11-23T10:00:13.140 に答える
0

明らかに、MSDN のストック コードが全体像を表しているわけではありません。私はあなたと同じ結果を得ます。

この男が何をしたかをチェックしてください。

編集:

ドメインではなくワークグループで試していると思いますよね?これがコツです。ワークグループを通過するには、もう少し多くの作業が必要です。上記のリンクには回避策があるようです。今夜家から再挑戦してみます。

于 2010-11-22T05:16:43.243 に答える