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一样。

知道为什么吗?

感谢

windows c#wpf/GetCommandLineArgs和注册表shell打开问题

带有tildas(~)的路径是文件的有效路径。你可以试着打开这个路径的文件,你会发现它是有效的。

Windows曾经将每个路径组件限制为8个字符,并且不允许在路径组件中有空格。当这些限制首次解除时,大多数程序无法处理新的路径名,因此Windows也会为每个具有超过8个字符的空格或路径组件的文件分配一个旧形式的路径名。你看到的带有波浪形符号的路径就是这样一条旧形式的路径。

当然,现在大多数软件都可以处理常规路径,但Windows仍然提供维护旧形式的路径(甚至Windows 10)。

如果你用注册你的程序,你可以告诉Windows你支持新的路径

C:'Users'path_to'program.exe "%1"

而不是

C:'Users'path_to'program.exe %1