3

Windows サービスからネットワーク ドライブをマップしようとしています。バッチ ファイルを使用して次のコマンドを実行します。

NET USE U: \\192.168.55.6\folder password

サービス コンストラクターまたは onstart イベントでバッチ ファイルを実行しているときに、ドライブがマップされていませんか?

        Process process = new Process();
        process.StartInfo.FileName = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\MAP.BAT";
        process.StartInfo.CreateNoWindow = false;
        process.Start();

Windowsサービスからネットワークドライブをどのようにマップしますか?

4

7 に答える 7

5

これは、Windows スクリプト ホスト オブジェクト モデルへの参照を使用して実現できます。

エントリ IWshRuntimeLibrary を参照セクションに追加するWindows スクリプト ホスト オブジェクト モデルへの COM 参照を追加します。これで、次のコードを使用してドライブをマップできます。

using IWshRuntimeLibrary;

IWshNetwork_Class network = new IWshNetwork_Class();
network.MapNetworkDrive("k:",@"\\192.168.20.35\MyShare", Type.Missing, "user1", "password1");

次のコードを使用して、マッピングを解除または削除できます。

network.RemoveNetworkDrive("k:");

ここに詳細な手順を文書化しました

于 2011-12-08T13:02:03.593 に答える
2

すべての問題は、Map Network Drive (API)を使用してネットワーク ドライブをマップすることで解決されました。サービスの OnStart イベント中に必要なドライブをマップします。

于 2009-04-28T09:03:04.717 に答える
1

2 つの問題があります。

  1. マッピングはユーザー セッションでのみ使用されます。つまり、マップされたドライブをサービスに実質的に使用することはできません。パスを使用する必要があります。
  2. 2 つ目の問題は、サービス (ローカル システム アカウントを使用) がネットワークにアクセスできないことです。具体的には、必要なリソースにアクセスできません。これを解決するには、次のいずれかを行う必要があります: サービスが実行されている「コンピューター」にフォルダーへの特定のアクセス権を付与するか、リソースにアクセスできるネットワーク (ドメイン) アカウントを使用するようにサービスを設定します。
于 2009-04-28T05:47:36.713 に答える
1

バッチ ファイルを呼び出して別の実行可能ファイルを呼び出すのではなく、適切な API 関数を呼び出す方がよい場合があります。あなたが探している機能はDefineDosDevice()

于 2009-04-27T10:58:26.647 に答える
0

パスワードに属するユーザー アカウントでサービスを実行していますか? MAP USE/USER:anotheruser を渡さない限り、コマンドは現在のユーザーを使用します。

于 2009-04-27T09:58:23.127 に答える
0

私の知る限り、マップされたドライブはユーザー セッションの間だけマップされます。Windows サービスが起動時に実行されている場合、またはユーザー セッションの一部ではない場合、ドライブ マッピングは失われます。

これは真実かもしれませんし、そうでないかもしれませんが、調べる価値はあります - 私は約 7 年前に経験した同様のシナリオからそれについて何かを覚えています.

于 2009-04-27T13:00:04.063 に答える
0

適切な「デスクトップとの対話」がない限り、サービスはネットワークドライブをマップできないと思いますか?

「ローカル システム」ではなく、「ネットワーク サービス」アカウントでサービスを実行してみてください。

于 2009-04-27T09:45:50.410 に答える