2012-02-17 2 views
0

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

[TARGETDIR] myexecutable.exe% 1

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

C: \ Documents и Settings \ пользователь \ Desktop \ teestqqqq.xls

это даст мне:

C: \ DOCUME ~ 1 \ пользователь \ Desktop \ TEEST ~ 1.XLS

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

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

+0

Это короткий путь, который вы получаете. Почему это проблема? – rene

+0

обновлено в вопросе – Jerome

ответ

1

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

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

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

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

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

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

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

+0

обновлено в вопросе – Jerome

2

Попробуйте

Path.GetFullPath(path) 

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

3

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