autorun.inf: как получить букву диска?

Я добавил эту запись в контекстное меню USB-накопителя через autorun.inf:

[AutoRun]
shell\pageant=Activate SSH Key
shell\pageant\command=PuTTY\pageant.exe PuTTY\davids.ppk

И PuTTY\pageant.exe, и PuTTY\davids.ppk являются файлами на USB-накопителе, и их следует извлекать оттуда.

Когда я запускаю это в оболочке из корня флешки, он работает так, как задумано. Но, запустив его из меню, он пытается загрузить ключ из C:\Windows\system32\PuTTY\davids.ppk (проверено с помощью Процесс Monitor).

Попытка использовать простой сценарий cmd привела к следующему результату:

    C:\Windows\system32>cd PuTTY
    Das System kann den angegebenen Pfad nicht finden.

    C:\Windows\system32>pageant.exe davids.ppk
    Der Befehl "pageant.exe" ist entweder falsch geschrieben oder
    konnte nicht gefunden werden.

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


person David Schmitt    schedule 05.05.2009    source источник


Ответы (2)


Я думаю, что самым простым решением было бы создать командный файл, который сделает это за вас. Что-то под названием activatekey.cmd вот так:

REM switch to the directory containing this script
for %%a in (%0) do cd /D %%~da%%~pa

cd PuTTY
pageant.exe davids.ppk

Поместите файл activatekey.cmd на USB-накопитель и измените autorun.inf на:

[AutoRun]
shell\pageant=Activate SSH Key
shell\pageant\command=activatekey.cmd
person Shalom Craimer    schedule 05.05.2009
comment
Хм, хорошо - я отредактировал сценарий, изменив каталог, чтобы он был таким же, как расположение файла activatekey.cmd. Интересно, сработает ли это для вас? (На самом деле я был настолько взволнован вашей идеей, что уже реализовал нечто подобное на своем USB-накопителе! За исключением того, что мое решение немного сложнее - позволяющее безопасно извлечь накопитель даже после выполнения pageant.exe.) - person Shalom Craimer; 05.05.2009

Кажется, он читает системную переменную "Путь". :( Вы можете добавить диск в путь, но проблема с получением буквы диска. :-(

Обновление 1: вы можете получить букву диска с помощью сценария VB.

Обновление 2: Да, я думаю, вы справитесь. Посетите эту страницу.

Обновление 3: я проверил сценарий. Работает отлично.

Dim  oDrive
Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
For Each oDrive In oFSO.Drives
WScript.Echo "Drive Letter" , oDrive.DriveLetter
WScript.Echo "Drive Type" , oDrive.DriveType
Next

Используйте какой-либо метод проверки наличия файлов, чтобы различать несколько USB-накопителей.

person Chathuranga Chandrasekara    schedule 05.05.2009
comment
Спасибо за ответ, это побудило меня внести несколько уточнений в вопрос. - person David Schmitt; 05.05.2009