3

サービスのコードは次のとおりです

            System.Diagnostics.Process proc = new System.Diagnostics.Process(); // Declare New Process

            var arguments =
                String.Format("--ip {0}  --user {1} --passwd {2} --guest {3} --gpasswd {4} --action {5}",
                              controllerIPAddress, controllerUsername, controllerPassword, username, password, action);

            proc.StartInfo.Arguments = arguments;

            proc.StartInfo.FileName = "C:\\Program Files\\Netspot\\ControllerInterfaceService\\batchfile.bat";

            proc.StartInfo.RedirectStandardError = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.CreateNoWindow = true;
            proc.Start();
            proc.WaitForExit();

WGETコマンドを呼び出すdosスクリプトを実行するWindowsサービスがありますが、すべて問題ありませんが、バッチスクリプトを使用して一時フォルダーを作成および削除する必要があります。

私が抱えている問題は、サービスがパスをにマッピングしていることです

  c:\windows\system32

それ以外の

  C:\\Program Files\\Netspot\\ControllerInterfaceService\\

これは、テストハーネス内で正常に機能します。

サービスがローカルフォルダーにマッピングする代わりにsystem32フォルダーを使用する理由に関するアイデア

4

3 に答える 3

3

デフォルトでは、Windowsサービスの現在のディレクトリはSystem32です。

このリンクは役立つかもしれません:

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);

上記のコード行を使用して、現在のディレクトリをWindowsサービスと同じディレクトリに設定します。

于 2012-01-31T12:01:42.240 に答える
0

Microsoftで作業している場合を除き、windows\system32にフォルダーを作成しないでください。

于 2012-01-31T11:06:43.063 に答える
0

バッチスクリプトは相対パスまたは絶対パスを使用していますか?

相対的な場合は、現在の作業ディレクトリを変更します。これは、を介して設定できますProcessStartInfo。MSDN情報を参照してください:http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx

UserNameとPasswordを指定する場合は、WorkingDirectoryプロパティを設定する必要があります。プロパティが設定されていない場合、デフォルトの作業ディレクトリは%SYSTEMROOT%\system32です。

%temp%Blogbeardが提案するように書くことも検討してください。

(バッチスクリプトを投稿してください)

于 2012-01-31T12:00:07.923 に答える