2

Process.Start() で実行可能ファイルを起動しようとしています。exe に DLL 依存関係がない場合、正常に動作します。ただし、2 つの DLL を含める必要がある場合、機能しません。WorkingDirectory を設定してみましたが、必要な 2 つの DLL がそこに存在することを確認しました。何か案は?

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "memcached.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = arguments;  //not shown           
startInfo.WorkingDirectory = Environment.CurrentDirectory;

try
  {
    using (Process exeProcess = Process.Start(startInfo))
      {
        exeProcess.WaitForExit();
      }
  }
    catch (Exception ex)
  {
    Trace.TraceError(ex.Message);  // never gets here
  }

これは、Windows Azure Memcached Solution Accelerator に基づくコードです。memcached が起動できない場合、ダイアログ ボックスが表示されます。残念ながら、コードがクラウドでリモートで実行されている場合、これを確認することはできません。

4

3 に答える 3

3

DLLを必要とする別のプロセスを開始しようとしても同様の問題が発生し、それを見つけることができませんでした。私の場合、解決策は非常に単純で、「\」がありませんでした。

procInfo.WorkingDirectory = @"C:\filedir"; //won't work
procInfo.WorkingDirectory = @"C:\filedir\" ; //would do the trick

procInfo.WorkingDirectory = Enviroment.CurrentDirectory; //== "C:\filedir", that won't work either
procInfo.WorkingDirectory = Enviroment.CurrentDirectory + '\\'; // would work.

それがあなたを助けることを願っています。

于 2010-08-17T17:25:23.957 に答える
1

問題はWorkingDirectory、現在のプロセスの現在のディレクトリに設定している可能性があります (プログラムを含むディレクトリとは限らず、どこにでもある可能性があります)。作業ディレクトリを、起動したい exe を含むディレクトリに設定してみてください。

また、DLL がmemcached.exe(または で必要な場所にmemcached.exe) あることを確認しましたか?

于 2010-01-16T22:42:00.053 に答える
0

.EXE ファイルとその参照アセンブリを同じ場所に配置し、WorkingDirectory.WorkingDirectoryそのフォルダーに定義するようにしてください。これはおそらくうまくいくでしょう。

極端な代替案の1 つは、アセンブリ (DLL) を参照する厳密な名前を付けて、それらを GAC に登録することです。

このオプションについて考える前に、他のすべての選択肢を使い尽くす必要があります。

于 2010-01-16T22:47:31.037 に答える