非常に長いファイルパスを渡すときに、パラメータが切り捨てられます。プログラムを起動し、コマンドparamsを介してすべてを渡す必要があります。コマンドを切り捨てるだけの場合もあります。それはグローバルに行われます-したがって、それは各パラメータだけでなく全体の問題です。
編集:問題はおそらくmonkey_pが言ったようにコマンドラインの長さの制限です。質問は:それをバイパスする方法は?(ファイルは別の場所に存在する可能性があるため、作業ディレクトリを変更しても実行されません)。
あなたの質問が何であるかはわかりませんが、コマンドラインには制限があります。これと同じ制限がProcess.Start(command、args)にも有効です。
Microsoft Windows XP以降を実行しているコンピュータでは、コマンドプロンプトで使用できる文字列の最大長は8191文字です。MicrosoftWindows2000またはWindowsNT4.0を実行しているコンピュータでは、コマンドプロンプトで使用できる文字列の最大長は2047文字です。
制限を回避する方法制限を回避するには、次の1つ以上の方法を使用します(状況に応じて)。
- 長いコマンドラインを必要とするプログラムを変更して、パラメータ情報を含むファイルを使用するようにしてから、コマンドラインにファイルの名前を含めます。
たとえば、バッチファイルでExecutableFile.exe Parameter1 Parameter2 ... ParameterNコマンドラインを使用する代わりに、次のコマンドラインと同様のコマンドラインを使用するようにプログラムを変更します。ここで、ParameterFileは必要なパラメーターを含むファイルです。 (parameter1 parameter2 ... ParameterN):
ExecutableFile.exe c:\temp\ParameterFile.txt
- 大きな環境変数を使用するプログラムを変更して、環境変数に含まれる文字が2047文字または8191文字未満になるようにします(オペレーティングシステムに応じて)。
たとえば、PATH環境変数に2047文字または8191文字(オペレーティングシステムに応じて)を超える文字が含まれている場合は、次の1つ以上の方法を使用して文字数を減らします。
- フォルダとファイルには短い名前を使用してください。
- フォルダツリーの深さを減らします。
- PATH環境変数で必要なフォルダーが少なくなるように、ファイルをより少ないフォルダーに保管します。
- .dllファイルを見つけるためのPATHの依存関係を減らすために使用できる可能な方法を調査してください。
これはMicrosoftサポートからのものなので、私には何の役にも立ちません。この制限を増やすことはできず、他の方法で実行する方法はないようです...
私がやろうとしていることは、各ファイルへのパスを覚えて、それらをいくつかのDIRに移動し、CurrentDirectoryをDIRに設定してプログラムを実行し、ファイル名を渡すだけです。プログラムが終了したら、ファイルを元の場所に戻します-醜い、醜い、醜い、私は知っていますが、他の方法はないようです...