windows c#wpf/GetCommandLineArgs和注册表shell打开问题
本文关键字:shell 问题 注册表 c#wpf GetCommandLineArgs windows | 更新日期: 2023-09-27 18:28:51
我的程序允许用户直接用它打开文件。
为此,我创建了一个注册表项,以文件的路径作为第一个参数打开程序。
这是我的注册表项:
C:'Users'path_to'program.exe %1
这里,%1
是指定的路径。
在简单的路径中,就像C:'Users'path'path'file.png
一样,它是有效的;完美地
但是当我选择打开一个特殊的路径(例如,用空格)时,我得到了这样的东西:C:'Users'path'DOCUME~'BROKEN~'path_ok~'FILE~1
->BROKEN~
是一条有空格的路径,通常它和broken path test
一样。
知道为什么吗?
感谢
带有tildas(~)的路径是文件的有效路径。你可以试着打开这个路径的文件,你会发现它是有效的。
Windows曾经将每个路径组件限制为8个字符,并且不允许在路径组件中有空格。当这些限制首次解除时,大多数程序无法处理新的路径名,因此Windows也会为每个具有超过8个字符的空格或路径组件的文件分配一个旧形式的路径名。你看到的带有波浪形符号的路径就是这样一条旧形式的路径。
当然,现在大多数软件都可以处理常规路径,但Windows仍然提供维护旧形式的路径(甚至Windows 10)。
如果你用注册你的程序,你可以告诉Windows你支持新的路径
C:'Users'path_to'program.exe "%1"
而不是
C:'Users'path_to'program.exe %1