【问题标题】:Shellexecute Error 2 - The specified file was not foundShellexecute 错误 2 - 找不到指定的文件
【发布时间】: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


【解决方案1】:

我终于找到了显而易见的。上面示例中给出的路径只是一个示例。真正的路径是:

I:\Prosjekt\Læringssenteret\VgFriskoleIndivid\Program\utvOve\WisKrypt\Install

问题是挪威字符:æ 但这并不能解释为什么我收到错误 5 - 尝试 UNC 路径时访问被拒绝...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2018-06-11
    • 2021-07-14
    • 2014-04-12
    • 2016-08-17
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多