我如何从 delphi 7 应用程序 运行 mklink 系统命令 (cmd.exe)

How can I run a mklink system command (cmd.exe) from a delphi 7 aplpication

在 运行 的应用程序中,我想 运行 命令行 Mklink /d(link 位置)(实际 file/folder 位置).

到目前为止我有:

symLink := PChar('/d C:\Data\'+fileName+' N:\"Database Archives"\'+fileName);

ShellExecute(0, nil, 'Mklink', symLink, nil, SW_SHOWNORMAL);

但我也尝试过:

symLink := PChar('Mklink /d C:\Data\'+fileName+' N:\"Database Archives"\'+fileName);

ShellExecute(0, nil, 'cmd.exe', symLink, nil, SW_SHOWNORMAL);

我的方向正确吗? 有没有文档解释ShellExecute需要的每个参数?

简单地说,不要这样做。使用 API。它被称为 CreateSymbolicLink。传递 SYMBOLIC_LINK_FLAG_DIRECTORY 标志。

这更加稳健,可以让您正确报告错误,应对没有 cmd.exe 的系统等等。

请注意,创建符号链接需要提升进程。我相信你已经知道了。还要按照链接文档中的描述检查错误。

更广泛地说,您需要重新考虑问题中的具体路径。您不能创建跨卷符号链接。

关于文档,这些是 Windows 功能。只需在搜索引擎中输入名称,您就会找到 MSDN 文档。


在较旧的 Delphi 中,您需要定义函数,因为提供的 header 翻译没有它。

const
  SYMBOLIC_LINK_FLAG_DIRECTORY = [=10=]000001;

function CreateSymbolicLinkA(
  lpSymlinkFileName: PAnsiChar;
  lpTargetFileName: PAnsiChar;
  dwFlags: DWORD
): Boolean; stdcall; external 'kernel32';

function CreateSymbolicLinkW(
  lpSymlinkFileName: PWideChar;
  lpTargetFileName: PWideChar;
  dwFlags: DWORD
): Boolean; stdcall; external 'kernel32';