【发布时间】:2017-08-11 09:04:06
【问题描述】:
我正在尝试:
cmdline := 'I:\test.exe';
Result := ShellExecute(0,nil, PChar(cmdline),PChar(''),nil,1)
其中 I:\ 是网络驱动器。这会给我错误:2 - 找不到文件
如果我尝试:
cmdline := '\\10.10.10.10\data\test.exe';
Result := ShellExecute(0,nil, PChar(cmdline),PChar(''),nil,1)
给出错误:5 - 拒绝访问
所以我猜ShellExecute 没有得到映射的网络驱动器,也没有得到登录用户的凭据。
那么如何让ShellExecute在当前用户环境下执行命令呢?
或者更有可能:我遗漏了什么明显的东西?
希望@RBA 给了我我现在尝试过的显而易见的事情:
FillChar( StartupInfo, SizeOf( TStartupInfo ), 0 );
StartupInfo.cb := SizeOf( TStartupInfo );
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := sw_Normal;
FillChar( ProcessInfo, SizeOf( TProcessInformation ), 0 );
if CreateProcess(pchar(cmdline), Nil, Nil, Nil,
False, CREATE_NEW_CONSOLE, Nil, Nil,
StartupInfo, ProcessInfo) then
result := true
else
result := false;
但仍然没有启动 exe :( 同样的错误:2 - 找不到文件。 让我相信除了代码之外还有什么东西在耍我……
【问题讨论】:
-
无论如何,您都不应该使用 ShellExecute() 来启动 .exe 文件。您应该改用 CreateProcess()
-
所以我用谷歌搜索并尝试了 CreateProcess,但仍然无法在映射驱动器上启动 exe。 (我将使用 CreateProcess 示例更新我的问题)
-
@RBA 如果我可以问的话,使用 ShellExecute() 启动 exe 有什么问题
-
@Fero - 一个简单的谷歌搜索为您的问题提供了很多答案。看看stackoverflow.com/questions/10747479/… 和
-
@RBA,我明白了,但这并不能解释为什么在这种情况下使用 ShellExecute() 是错误的
标签: lazarus