2016-06-25 3 views
1

Я хочу запустить командную строку с повышенными правами в Windows в определенный рабочий каталог. Так, например, я попытался это:ShellExecute запрос cmd с определенным рабочим каталогом

ShellExecute(
    hWnd, 
    L"runas", 
    L"cmd.exe", 
    NULL, 
    m_szSelectedFile, 
    SW_SHOW 
); 

Где m_szSelectedFile = L"C:\\Users\\User\\Desktop"

ShellExecute документирована как

HINSTANCE ShellExecute(
    _In_opt_ HWND hwnd, 
    _In_opt_ LPCTSTR lpOperation, 
    _In_  LPCTSTR lpFile, 
    _In_opt_ LPCTSTR lpParameters, 
    _In_opt_ LPCTSTR lpDirectory, 
    _In_  INT  nShowCmd 
); 

К сожалению, он всегда начинает с C:\WINDOWS\system32. Что я делаю не так?

+0

Что вы делаете неправильно, в основном это делать на C++. Просто создайте ярлык. –

+0

@ Cheersandhth.-Alf Я пытаюсь понять, что вы имеете в виду; вы думаете, что можете помочь пролить некоторый код, чтобы попытаться объяснить его? Это поможет мне понять. Может быть, я должен объяснить контекст того, что я пытаюсь? Я написал обработчик контекстного меню оболочки, и я хочу, чтобы у него было меню правой кнопки мыши, чтобы запустить повышенную командную строку в текущем выбранном месте. – Alexandru

+0

'object.ShellExecute (sFile [, vArguments] [, vDirectory] [, vOperation] [, vShow])' Заметьте, что вы передаете значение null для каталога –

ответ

5

Microsoft добавил это как функцию безопасности, начиная с Windows 8. Всякий раз, когда cmd.exe обнаруживает, что он работает с повышенным уровнем, он игнорирует его параметры запуска и всегда запускается в %SystemRoot%\System32. Вы не можете переопределить это поведение.

Вы можете, однако, сменить каталог как первую команду в приглашении. Для этого установите lpFile на "cmd.exe" как обычно. Затем установите lpParameters в "/k cd /d d:\your\path". CMD немедленно сменит каталоги при запуске, а затем останется открытым для дальнейших команд.

Смежные вопросы