0

プロセスを開始する Windows サービスを作成しようとしています。このプロセスは、別のアカウントにログインする必要があります。

    protected override void OnStart(string[] args)
        {
            _thread.Start();
        }

    private void ThreadFunction()
    {
        var process = new Process
                          {
                                  StartInfo =
                                      {
                                          UserName = "User",
                                          Password = "Pass",
                                          UseShellExecute = false,
                                          FileName = @"C:\Program Files\Default Company Name\ServiceProcessInstaller\ConsoleProcess.exe"
                                      }
                              };
        process.Start();
    }

これはかなり単純だと思っていましたが、process.startとwindows serviceは油と水のようなものです。

プロセスを開始しても何も起こらず、最終的に例外が発生しました: Windows はローカル コンピューターで "AServiceProcess" サービスを開始できませんでした。エラー 1067: プロセスが予期せず終了しました。

私が得ることができるすべての助けに本当に感謝しています.何か十分に明確でない場合はお知らせください.

4

2 に答える 2

0

WinNT50と新しいクレデンシャルを設定して、関数「CreateUserAsProcess」を使用して問題を解決することになりました。

于 2012-09-11T07:57:53.250 に答える
0

一歩下がって、Windows サービス プロセスに関する概念的な情報を確認することをお勧めします。サービスは、Unix デーモン プロセスの実行と概念的にほぼ同じように、ログオンしているユーザーの外部で開始および実行される単なるプロセスです。あなたのコードは別のプロセスを開始するために使用したいサービスを表していると言いましたが、上に示した Start メソッドは "ServiceProcess.exe" と呼ばれるものを開始ています。

サービス プロセスには 1 セットの資格情報が必要であり、提供された (または暗黙的に使用された) 資格情報は、(情報に基づいて) 外部プロセスを開始するために必要なアクセス許可を持っていないように見えます。

ここで非常に特殊な要件がない限り、可能であれば、必要なアクションをサービス プロセス自体に実装することを検討することをお勧めします。上記の構造を機能させることはできるかもしれませんが、長期にわたって維持できるかどうかはわかりません。

于 2012-08-14T16:15:58.907 に答える