ShellExecute具有特定工作目录的cmd提示符

Ale*_*dru 3 c++ windows cmd visual-c++

我想在Windows中将提升的命令提示符启动到特定的工作目录.例如,我试过这个:

ShellExecute(
    hWnd,
    L"runas",
    L"cmd.exe",
    NULL,
    m_szSelectedFile,
    SW_SHOW
);
Run Code Online (Sandbox Code Playgroud)

哪里 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
);
Run Code Online (Sandbox Code Playgroud)

不幸的是,它总是推出C:\WINDOWS\system32.我究竟做错了什么?

Rya*_*ose 6

Microsoft在Windows 8中将此添加为安全功能.每当cmd.exe检测到它正在运行时,它会忽略其启动参数并始终启动%SystemRoot%\System32.您无法覆盖此行为.

但是,您可以将目录更改为提示中的第一个命令.要做到这一点,设置lpFile"cmd.exe"正常.然后设置lpParameters"/k cd /d d:\your\path".CMD将在启动时立即更改目录,然后保持打开状态以进一步执行命令.