1

Program Files 内に配置されたプロセスを開始する必要があります。しかし、問題は Process.Start がパスにスペースをとらないことです。

Process regeditProcess = Process.Start("regedit.exe", "/s C:\\Program Files\\Test Folder\\sample.reg");

道:

C:\\Program Files\\Test Folder\\sample.reg

「Program Files」の Program と Files の間にはスペースがあります。それは私の問題です。スペースを避けるには?

4

4 に答える 4

4

次のように、スペースを含むコマンド ライン引数を引用符 (") で囲んで渡す必要があります。

Process regeditProcess = Process.Start("regedit.exe", "/s \"C:\\Program Files\\Test Folder\\sample.reg\"");
于 2012-07-25T06:56:39.390 に答える
3

Process.Startここでは問題ではありません。問題は、regedit.exe がパラメーター内のスペースを受け入れないことです。引用符で囲みます:

Process.Start("regedit.exe", "/s \"C:\\Program Files\\Test Folder\\sample.reg\"");

また、%ProgramFiles%ハードコーディングの代わりに、または同等のものを使用して、プログラム ファイル フォルダーを取得する必要があります"C:\\Program Files"

于 2012-07-25T06:57:28.630 に答える
1

このようなことをして、プログラムファイルを取得できます

Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles)

より詳細なコードはこちら

if(Environment.Is64BitOperatingSystem)
{
Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86)
}
else
{
Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles)
}
于 2012-07-25T06:57:36.540 に答える
1

適切なことは、スペースを含むパスを引用することです。したがって、引数文字列は次のようになります。

"/s \"C:\\Program Files\\Test Folder\\sample.reg\""

ただし、パスを操作するときは、通常、常に逐語的なリテラル文字列を使用する必要があります。

@"/s ""C:\Program Files\Test Folder\sample.reg"""

それ以外の場合は、8.3 名を使用してパスを変換できます。フレームワークでこれを行う方法はわかりませんが、ルールは簡単です。6 文字を超える長い名前の場合は、スペース以外の最初の 6 文字にチルダ ( ~) を追加し、その後に数字 (通常は で始まり1ます) を付けます。複数のファイルに同じ 6 文字が含まれている場合、数字はアルファベット順に増加します。したがって、あなたの場合は次のように書くことができます:

@"/s C:\Progra~1\TestFo~1\sample.reg"
于 2012-07-25T06:58:20.750 に答える