Реестр не любит длинное имя файла для команд оболочки или глаголов - PullRequest
0 голосов
/ 15 марта 2011

(если не относится к SO, пожалуйста, обратитесь к другому подходящему месту, спасибо).

При использовании реестра, чтобы связать расширения файлов и приложения, я добавляю полное имя файла моего приложения, но это не такне работает хорошо, только если я использую имя файла 8.3.

например (взято из реестра) это работает:

[HKEY_CLASSES_ROOT\Toto.Document\shell\myVerb\command]
@="C:\\my\\path\\bin\\Debug\\bin\\myexe_~1.EXE /dde"
[HKEY_CLASSES_ROOT\Toto.Document\shell\myVerb\ddeexec]
@="[myVerb(\"%1\")]"

, но это не работает:

[HKEY_CLASSES_ROOT\Toto.Document\shell\myVerb\command]
@="C:\\my\\path\\bin\\Debug\\bin\\myexecutable.EXE /dde"
[HKEY_CLASSES_ROOT\Toto.Document\shell\myVerb\ddeexec]
@="[myVerb(\"%1\")]"

Действие вызывается щелчком правой кнопкой мыши по файлу в Проводнике, я получаю сообщение об ошибке: «Windows не может найти« c: \ users \ me \ desktop \ tata.toto ». Убедитесь, что вы правильно ввели имя, изатем попробуйте снова ".


Я создаю ключи программно с помощью CRegKey и использую GetModuleFileName, чтобы получить путь к приложению.

2 вопроса: - Я, вероятно, что-то упустил в своемзапись в реестре?(я пробовал цитировать пути, но не работает) - Могу ли я получить «короткое» имя файла?(поиск немного кажется, что GetShortPath должен работать, но не всегда!)

Спасибо.

Макс.


(редактирование 22/03/2011) Iпопробовал использовать кавычки, но это не сработало (с / dde) Я решил использовать нормальные параметры вместо / dde, и, похоже, он хорошо работает с обычным путем (не укороченным, как указано выше).

Явсе еще неясно, почему при создании простого проекта MFC SDI он будет записывать значения реестра со старым коротким именем вместо длинного имени.

Еще раз спасибо.

Макс.

1 Ответ

1 голос
/ 15 марта 2011

Попробуйте создать ключ с другой парой двойных кавычек (примечание между .EXE и /dde:

@="C:\\my\\path\\bin\\Debug\\bin\\myexecutable.EXE" "/dde"
...