Передать имя файла в .exe в разделе реестра - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть небольшой установщик, который устанавливает некоторые .exe и DLL на целевой компьютер и устанавливает ключ в реестре, чтобы при щелчке правой кнопкой мыши по файлам Excel пользователь увидел новый пункт контекстного меню.Этот командный ключ имеет для значения что-то вроде:

[TARGETDIR] myexecutable.exe% 1

% 1 имеет эффект, чтобы передатьимя файла для моего исполняемого файла в args [0] .Я ожидаю, что это даст моему .exe полный путь.Но это дает мне какой-то сжатый путь.Например, для:

C: \ Documents and Settings \ user \ Desktop \ teestqqqq.xls

это даст мне:

C: \ DOCUME ~ 1 \ user \ Desktop \ TEEST ~ 1.XLS

Это проблема для меня.Как я могу решить это?Мне нужен правильный полный путь.

ОБНОВЛЕНИЕ: Как запрошено в комментариях и ответах, это проблема для меня, потому что из полученного пути я получаю некоторые новые имена папок.Эти имена папок должны быть зафиксированы в некоторых SVN-репозиториях позже.Я заметил, что на некоторых машинах моих пользователей .exe получает путь сортировки, а на других - длинный путь.Мои пользователи считают, что имена папок являются «уникальными» для целей DIFF в SVN.Мне просто нужен способ обеспечить уникальность имен папок (я думаю, что на момент написания этой статьи уже есть то, что мне нужно в ответах ниже)

Ответы [ 4 ]

3 голосов
/ 19 февраля 2012

Замените %1 на "%1", т.е. заключите в кавычки, вы получите длинное имя файла. Дело в том, что в «Документах и ​​настройках» есть пробелы в названии, которые нельзя правильно передать в вашу программу без кавычек. Вот почему оболочка преобразует путь к короткому имени без пробелов, а затем передает его в вашу программу.

2 голосов
/ 17 февраля 2012

Попробуйте

Path.GetFullPath(path)

Это должно сделать это. Но вы должны уметь работать по короткому пути.

1 голос
/ 17 февраля 2012

Задолго до "длинных имен файлов". Имена файлов в MS DOS были ограничены 8 символами для имени, сопровождаемыми точкой и максимум 3 символами для расширения. То, что вы видите, это короткая версия пути с длинными именами файлов. Вот более подробное объяснение: http://www.computerhope.com/issues/ch000209.htm

Теперь объясните, почему данный путь является проблемой для вас? Потому что Windows API должны уметь работать и с версиями с короткими именами файлов.

Как упоминалось в ken2k, System.IO.Path.GetFullPath(..) вернет расширенный путь с кратким путем к файлу.

Цитирование документации:

Если вы передадите короткое имя файла, оно будет расширено до длинного имени файла.

1 голос
/ 17 февраля 2012

Вы можете попробовать:

string shortName = @"C:\DOCUME~1\user\Desktop\TEEST~1.XLS";
string longName = System.IO.Path.GetFullPath(shortName);
...