我必须启动放在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
“程序文件”中的程序和文件之间有一个空格。 多数民众赞成我的问题如何避免空间?
答案 0 :(得分:3)
您应该在引号(“)中传递包含空格的命令行参数,如下所示:
Process regeditProcess = Process.Start("regedit.exe", "/s \"C:\\Program Files\\Test Folder\\sample.reg\"");
答案 1 :(得分:3)
Process.Start
不是问题,问题是regedit.exe不接受参数中的空格。把它写成引号:
Process.Start("regedit.exe", "/s \"C:\\Program Files\\Test Folder\\sample.reg\"");
另外,您应该使用%ProgramFiles%
或类似内容来获取程序文件文件夹而不是硬编码"C:\\Program Files"
。
答案 2 :(得分:1)
您可以执行以下操作来获取程序文件
Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles)
这是更详细的代码
if(Environment.Is64BitOperatingSystem)
{
Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86)
}
else
{
Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles)
}
答案 3 :(得分: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"