我发现CLI工具存在以下问题,该工具通过drag'n'drop接受文件。
文件X:\ MyApp.exe是一个CLI工具,需要UAC提升(将被授予)。
操作系统是Win7 32位。
X:是NAS的网络驱动器。
当我将X:\ MyDLL.dll拖到X:\ MyApp.exe时,FileExists(ParamStr(1))将为false。 RaiseLastOSError()将显示代码3.我做错了什么?
当源文件存储在C :(并拖入EXE文件)时,它确实有效。
WriteLn('ParamStr 1 = '+ParamStr(1)); // X:\MyDLL.dll
if not FileExists(ParamStr(1)) then
begin
try
RaiseLastOSError;
except
on E: exception do
begin
Writeln(E.message); // (Translated) System error 3. The file could not be found.
end;
end;
exit;
end;
答案 0 :(得分:1)
提升的应用程序确实会看到用户的映射驱动器。这类似于在用户帐户下登录的服务以及使用相同用户帐户登录桌面的用户。该服务将无法看到用户的映射驱动器。
解决此类情况的方法是创建一个使用您需要的权限运行的服务,然后创建一个运行非提升的标准应用程序。应用程序将消息发送到服务,以便它可以执行需要提升的操作。