4

Process.StartWindows 2008 テスト環境で作業しているときに、Windows 7 Professional 64 ビット開発マシンで失敗するメソッドの実装があります。

const string CommandDirectory = @"C:\Program Files (x86)\Command";

var process = new Process
{
    StartInfo =
    {
        FileName = string.Format("{1}{0}MyExecutable.exe", Path.DirectorySeparatorChar, CommandDirectory),
        RedirectStandardError = true,
        RedirectStandardOutput = true,
        UseShellExecute = false,
        UserName = userName,
        Password = securePassword,
        Domain = "MYDOMAIN",
    },
};

process.Start();

process.Start();、開発マシンで次の例外が発生します。

System.ComponentModel.Win32Exception occurred
  HResult=-2147467259
  Message=The directory name is invalid
  Source=System
  ErrorCode=-2147467259
  NativeErrorCode=267
  StackTrace:
       at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
       at System.Diagnostics.Process.Start()
  InnerException: 

私はいくつかのことを試しました:

  1. プロセスに割り当てたユーザー アカウントが、実行可能ファイルがあるパスと %systemroot% の場所に対する完全な権限を持っていることを確認しました。また、ユーザーがローカル セキュリティ ポリシーで「認証後にクライアントを偽装する」権限を持っていることを確認しました。

  2. を明示的に に設定しようとProcessStartInfo.WorkingDirectoryしましたCommandDirectory。これを行うと、実行可能ファイルが起動しますが、説明なしですぐにクラッシュします。

  3. 個人の資格情報を使用するように、、、およびプロパティをUserName削除Passwordして、開発マシンでこの関数を作成しました。Domainしかし、これは展開には実用的ではありません。これにより、問題が資格情報と権限に関連しているように思えます。

誰が私が間違っているのかアドバイスできますか?

4

1 に答える 1

1

@Julien Lebosquainのコメントが私を答えに導きました。偽装したいユーザーとして、ローカルで 1 回ログオンする必要がありました。これにより、デフォルトのユーザー フォルダーが作成されました。

おそらく、私が呼び出していた実行可能ファイルは、AppData またはユーザー ディレクトリの別のサブフォルダーに書き込む必要がありました。

于 2014-03-17T19:23:21.420 に答える