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

“程序文件”中的程序和文件之间有一个空格。那是我的问题。如何避免空间?

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 回答