在通过Windows上下文菜单执行时,文件path中的空格会导致出现多个应用程序实例

我创build了一个WPF表单应用程序,可以通过Windows上下文菜单调用。 该应用程序工程很好,当我debugging它。 当我部署它并右键单击一个文件时,如果它在path中有任何空格,它将只读取到该空间的path,但为path中的每个空间打开一个窗口。 这是非常烦人的,我不知道如何解决这个问题。

我已经尝试使用Environment.GetCommandLineArgs()在我的方法以及只使用MainWindow(string文件path); 两种方法都会造成同样的问题。

这是一个ClickOnce应用程序,所以不知道这是否与它有任何关系,但是我确实捕获了正在执行的程序集的目录位置,当它第一次安装并使其在HKEY_CLASSES_ROOT * \ shell中更新registry时[ APP} \命令键。 默认值是具有ClickOnce应用程序可执行文件位置的扩展string,并添加了“%1”,以便可以将文件path作为parameter passing给它。

void checkRegistry() { RegistryKey baseKey=Registry.ClassesRoot.CreateSubKey("*\\shell", RegistryKeyPermissionCheck.ReadWriteSubTree); //add the key RegistryKey menuKey=baseKey.CreateSubKey("GetCRC"); menuKey.SetValue("", "Get CRC"); //add the command key RegistryKey commandKey = menuKey.CreateSubKey("command"); string appfilePath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); commandKey.SetValue("",String.Format("{0}\\GetCRC2.exe %1",appfilePath), RegistryValueKind.ExpandString); commandKey.Close(); menuKey.Close(); baseKey.Close(); } public MainWindow(string filePath) { InitializeComponent(); //check registry and add menu option checkRegistry(); var args = Environment.GetCommandLineArgs(); if (args.Count() > 1) { this.filepath = args[1]; } else { //run the file signatures this.filepath = filePath; } textboxFilePath.Text = filepath; calcSignatures(); } public MainWindow() { InitializeComponent(); //check registry and add menu option if it doesn't exist checkRegistry(); } 

尝试在应用程序名称和文件名称周围加上引号:

 string.Format("\"{0}\\GetCRC2.exe\" \"%1\"",appfilePath) 

如果该文件被命名为“长发”,args [1]将是“long”,args [2]将是“发”

你应该输入文件名引号或做一些处理从命令行的所有用户输入,就像我不知道…

为args.length不断添加参数和一个空格到文件名变量。

对不起,我不写实际的代码,我几乎不知道任何C#