You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Inno Setup安装程序为何无法正确处理Windows10中的网络驱动器?

解决Inno Setup无法访问网络驱动器的问题

方案1:避免UAC权限提升(适用于无需管理员权限的安装)

在Inno Setup脚本的[Setup]段添加配置:

PrivilegesRequired=none

安装程序将以普通用户权限运行,可正常访问已映射的网络驱动器(如S:)。

方案2:保留管理员权限同时显示网络驱动器

若安装必须使用管理员权限,可通过以下两种方式处理:

  • 方式A:加载用户网络驱动器映射
    在脚本的[Code]段添加代码,让特权会话加载当前用户的网络驱动器映射:
    function InitializeSetup(): Boolean;
    var
      Token: THandle;
      Elevated: Boolean;
      ResultStr: array[0..255] of Char;
    begin
      Result := True;
      if OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, Token) then
      begin
        GetTokenInformation(Token, TokenElevation, @Elevated, SizeOf(Elevated), nil);
        CloseHandle(Token);
        if Elevated then
        begin
          ExpandEnvironmentStrings('%USERPROFILE%', ResultStr, 255);
          if LoadUserProfileFromPath(ResultStr) then
          begin
            SHChangeNotify(SHCNE_DRIVEADD, SHCNF_IDLIST, nil, nil);
          end;
        end;
      end;
    end;
    
  • 方式B:调用系统Shell文件对话框
    在[Code]段自定义文件选择逻辑,使用系统原生对话框替代Inno自带控件,原生对话框可正常识别网络驱动器:
    function BrowseForNetworkFile(): String;
    var
      OpenDialog: TFileOpenDialog;
      FileName: PWideChar;
    begin
      Result := '';
      OpenDialog := TFileOpenDialog.Create(nil);
      try
        OpenDialog.Options := OpenDialog.Options + [fdoPickFiles];
        if OpenDialog.Execute then
        begin
          OpenDialog.GetResult(FileName);
          Result := WideCharToString(FileName);
          CoTaskMemFree(FileName);
        end;
      finally
        OpenDialog.Free;
      end;
    end;
    
    在需要文件选择的交互环节,调用此函数替代默认的文件选择控件即可。

方案3:使用UNC路径直接访问

若上述方案无效,可引导用户直接输入网络共享的UNC路径(如\\server\shared_folder),Inno Setup的文件对话框支持直接识别并访问这类路径。

内容的提问来源于stack exchange,提问作者user8105480

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:25:18