SetOverwrite参数

本文介绍了如何通过不同的设置来管理文件操作与数据优化,包括覆盖现有文件的策略、资料压缩选项以及是否启用数据块优化等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  SetOverwrite on|off|try|ifnewer
  此命令决定是否覆盖任何已有的文件。若是'off', 将不覆盖已有文件,若是'try', 将覆盖可以写的文件,无法写入的文件被跳过。若是 'ifnewer', 将只覆盖旧文件。

  SetCompress auto|force|off
  决定是否压缩资料。若设置为'auto',若压缩后文件变小,将进行压缩。若为 'force',将始终压缩资料文件。

  SetDatablockOptimize on|off
  此命令告诉编译器是否做数据块优化。这样的话可能会节约部分空间。

  SetDateSave on|off
  设置文件日期/时间,决定是否保存文件最后的写入时间和日期,安装后文件的日期就是此日期。
NSIS 用户手册 新闻、信息、支持、例子、指南等可以到 http://nsis.sf.net 查看。 快速链接: FAQ - 常见问题列表 NSIS Wiki - 例子、函数、指南、插件、软件等等 Forum - 发表你的问题或进行 NSIS 相关讨论 版权所有 (C) 1999-2009 贡献者 第一章: 介绍 NSIS 关于 NSIS 主要特性 特性列表 第二章: 教程: 基础知识 介绍 脚本文件 脚本结构 安装程序属性 页面 区段 函数 脚本的工作方式 逻辑代码结构 变量 调试脚本 脚本的执行 编译器命令 编译器 新式用户界面(Modern UI) 插件 更多 第三章: 命令行的用法 MakeNSIS 的使用 选项 注意事项 环境变量 例子 安装程序的使用 公共选项 卸载程序特殊选项 例子 第四章: 脚本参考 脚本文件格式 变量 用户变量 Var 其他可写的变量 常量 在字符串里使用常量 标记 相对跳转 页面 次序关系 页面选项 回调 Page UninstPage PageEx PageExEnd PageCallbacks 区段 区段命令 AddSize Section SectionEnd SectionIn SectionGroup SectionGroupEnd 卸载区段 函数 函数命令 Function FunctionEnd 回调函数 安装回调 .onGUIInit .onInit .onInstFailed .onInstSuccess .onGUIEnd .onMouseOverSection .onRebootFailed .onSelChange .onUserAbort .onVerifyInstDir 卸载回调 un.onGUIInit un.onInit un.onUninstFailed un.onUninstSuccess un.onGUIEnd un.onRebootFailed un.onSelChange un.onUserAbort 安装程序属性 常规属性 AddBrandingImage AllowRootDirInstall AutoCloseWindow BGFont BGGradient BrandingText Caption ChangeUI CheckBitmap CompletedText ComponentText CRCCheck DetailsButtonText DirText DirVar DirVerify FileErrorText Icon InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType LicenseBkColor LicenseData LicenseForceSelection LicenseText MiscButtonText Name OutFile RequestExecutionLevel SetFont ShowInstDetails ShowUninstDetails SilentInstall SilentUnInstall SpaceTexts SubCaption UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText WindowIcon XPStyle 编译器标记 AllowSkipFiles FileBufSize SetCompress SetCompressor SetCompressorDictSize SetDatablockOptimize SetDateSave SetOverwrite 版本信息 VIAddVersionKey VIProductVersion 指令 基本指令 Delete Exec ExecShell ExecWait File Rename ReserveFile RMDir SetOutPath 注册表、INI 文件指令 DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue EnumRegKey EnumRegValue ExpandEnvStrings FlushINI ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr WriteINIStr WriteRegBin WriteRegDWORD WriteRegStr WriteRegExpandStr 常规用途指令 CallInstDLL CopyFiles CreateDirectory CreateShortCut GetDLLVersion GetDLLVersionLocal GetFileTime GetFileTimeLocal GetFullPathName GetTempFileName SearchPath SetFileAttributes RegDLL UnRegDLL 流程控制指令 Abort Call ClearErrors GetCurrentAddress GetFunctionAddress GetLabelAddress Goto IfAbort IfErrors IfFileExists IfRebootFlag IfSilent IntCmp IntCmpU MessageBox Return Quit SetErrors StrCmp StrCmpS 文件指令 FileClose FileOpen FileRead FileReadByte FileSeek FileWrite FileWriteByte FindClose FindFirst FindNext 卸载程序指令 WriteUninstaller 混合指令 GetErrorLevel GetInstDirError InitPluginsDir Nop SetErrorLevel SetRegView SetShellVarContext Sleep 字符串操作指令 StrCpy StrLen 堆栈支持 Exch Pop Push 整数支持 IntFmt IntOp 重新启动指令 Reboot SetRebootFlag 安装记录指令 LogSet LogText 区段管理 SectionSetFlags SectionGetFlags SectionSetText SectionGetText SectionSetInstTypes SectionGetInstTypes SectionSetSize SectionGetSize SetCurInstType GetCurInstType InstTypeSetText InstTypeGetText 用户界面指令 BringToFront CreateFont DetailPrint EnableWindow FindWindow GetDlgItem HideWindow IsWindow LockWindow SendMessage SetAutoClose SetBrandingImage SetDetailsView SetDetailsPrint SetCtlColors SetSilent ShowWindow 多语言指令 LoadLanguageFile LangString LicenseLangString 多语言 语言选择 LangDLL 插件 RTL 语言 插件 DLLs 使用插件命令 手动调用插件 静默安装程序、卸载程序 第五章: 编译时的命令 编译时的命令 !include !addincludedir !addplugindir !appendfile !cd !delfile !echo !error !execute !packhdr !system !tempfile !warning !verbose 预定义 ${__FILE__} ${__LINE__} ${__DATE__} ${__TIME__} ${__TIMESTAMP__} 范围预定义 ${__GLOBAL__} ${__SECTION__} ${__FUNCTION__} ${__PAGEEX__} ${__UNINSTALL__} 读取环境变量 $%envVarName% 条件编译 !define !undef !ifdef !ifndef !if !ifmacrodef !ifmacrondef !else !endif !insertmacro !macro !macroend !searchparse !searchreplace 附录 A: 新式用户界面(Modern UI) 附录 B: DLL/TLB 库的安装 介绍 库的安装 介绍 参数 选项 LIBRARY_X64 LIBRARY_SHELL_EXTENSION LIBRARY_COM LIBRARY_IGNORE_VERSION 注意事项 例子 取消共享 DLL 共享 DLL 库的卸载 介绍 参数 选项 LIBRARY_X64 LIBRARY_SHELL_EXTENSION LIBRARY_COM 例子 Visual Basic 6 运行库 附录 C: 常用脚本 获取 Internet Explorer 版本 判断 .NET Framework 是否已安装? 判断 Macromedia Flash Player 是否已安装? 连接到 Internet 获取安装程序文件名 禁止多个安装程序实例 更多 Appendix D: 常用信息 错误级别 添加卸载信息到添加/删除程序面板 使用 System.dll 插件来调用一个外部 DLL 把安装详细信息导出到文件 如何读取 REG_MULTI_SZ 值 附录 E: 常用头文件 文件函数头文件 介绍 Locate GetSize DriveSpace GetDrives GetTime GetFileAttributes GetFileVersion GetExeName GetExePath GetParameters GetOptions GetOptionsS GetRoot GetParent GetFileName GetBaseName GetFileExt BannerTrimPath DirState RefreshShellIcons 文本函数头文件 介绍 LineFind LineRead FileReadFromEnd LineSum FileJoin TextCompare TextCompareS ConfigRead ConfigReadS ConfigWrite ConfigWriteS FileRecode TrimNewLines 文字函数头文件 介绍 WordFind WordFindS WordFind2X WordFind2XS WordFind3X WordFind3XS WordReplace WordReplaceS WordAdd WordAddS WordInsert WordInsertS StrFilter StrFilterS VersionCompare VersionConvert 附录 F: 更新纪录和发行说明 2.44 更改日志 主要更改 次要更改 2.43 发行说明 更改日志 次要更改 实用程序和插件 翻译 Plug-in API 构建系统 2.42 发行说明 更改日志 主要更改 次要更改 翻译 构建系统 2.41 更改日志 次要更改 翻译 构建系统 2.40 更改日志 主要更改 次要更改 翻译 2.39 更改日志 主要更改 次要更改 2.38 更改日志 主要更改 次要更改 Modern UI 翻译 2.37 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.36 发行说明 更改日志 主要更改 Modern UI nsDialogs 次要更改 实用程序和插件 翻译 构建系统 2.35 更改日志 主要更改 次要更改 实用程序和插件 2.34 发行说明 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.33 发行说明 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.32 发行说明 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.31 发行说明 更改日志 次要更改 实用程序和插件 翻译 构建系统 2.30 发行说明 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.29 发行说明 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.28 更改日志 主要更改 次要更改 实用程序和插件 翻译 构建系统 2.27 发行说明 更改日志 主要更改 次要更改 构建系统 2.26 发行说明 更改日志 主要更改 次要更改 新/更改的命令 实用程序和插件 翻译 构建系统 2.25 更改日志 主要更改 次要更改 新/更改的命令 实用程序和插件 翻译 构建系统 2.24 更改日志 主要更改 次要更改 新/更改的命令 实用程序和插件 翻译 构建系统 2.23 更改日志 次要更改 实用程序和插件 构建系统 2.22 发行说明 更改日志 次要更改 新/更改的命令 翻译 构建系统 2.21 更改日志 主要更改 次要更改 新/更改的命令 翻译 构建系统 2.20 更改日志 次要更改 翻译 构建系统 2.19 更改日志 次要更改 新/更改的命令 插件 翻译 2.18 更改日志 次要更改 翻译 2.17 更改日志 次要更改 翻译 2.16 发行说明 更改日志 主要更改 新/更改的命令 次要更改 翻译 构建系统 2.15 更改日志 新/更改的命令 次要更改 翻译 构建系统 2.14 发行说明 更改日志 主要更改 次要更改 2.13 发行说明 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 翻译 构建系统 2.12 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 翻译 构建系统 2.11 发行说明 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 翻译 构建系统 2.10 更改日志 主要更改 次要更改 翻译 构建系统 2.09 更改日志 主要更改 新/更改的命令 次要更改 翻译 构建系统 2.08 发行说明 更改日志 主要更改 次要更改 构建系统 2.07 发行说明 更改日志 主要更改 新/更改的命令 次要更改 Include Files 实用程序和插件 翻译 2.06 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 2.05 发行说明 更改日志 新/更改的命令 次要更改 2.04 更改日志 主要更改 次要更改 2.03 发行说明 更改日志 主要更改 新/更改的命令 次要更改 2.02 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 2.01 发行说明 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 2.0 发行说明 更改日志 Changes from 1.98 Changes from RC4 2.0 Release Candidate 4 更改日志 主要更改 次要更改 实用程序和插件 2.0 Release Candidate 3 更改日志 次要更改 实用程序和插件 2.0 Release Candidate 2 更改日志 次要更改 实用程序和插件 2.0 Release Candidate 1 发行说明 更改日志 主要更改 实用程序和插件 2.0 Beta 4 发行说明 更改日志 主要更改 新/更改的命令 次要更改 实用程序和插件 2.0 Beta 3 2.0 Beta 2 2.0 Beta 1 2.0 Beta 0 2.0 Alpha 7 2.0 Alpha 6 2.0 Alpha 5 2.0 Alpha 4 2.0 Alpha 3 2.0 Alpha 2 2.0 Alpha 1 2.0 Alpha 0 旧版本 附录 G: 构建 NSIS 常规构建 在 Windows 上构建 在 POSIX 上构建 每日构建 附录 H: 致谢名单 程序员 资源设计师 翻译人员 文档编写者 附录 I: 许可协议 版权 适用许可协议 zlib/libpng 许可协议 bzip2 许可协议 通用公共许可证 版本1.0 LZMA 压缩模块特殊例外声明 附录 J: 简体中文用户手册说明 致谢 NSIS 交流 NSIS 相关网站 翻译反馈 免责声明
<think>我们正在解决NSIS脚本中CreateShortcut桌面快捷方式路径不正确的问题。根据用户描述,使用HMVNISEdit向导生成的快捷方式位置总是不对。结合引用内容,我们知道CreateShortcut命令的语法,但需要确保路径变量正确。可能的原因及解决方案:1.路径变量$DESKTOP可能被错误设置或未正确指向桌面。2.系统上下文(当前用户还是所有用户)设置不正确。3.64位系统路径重定向问题。具体步骤:步骤1:确认使用正确的路径变量在CreateShortcut命令中,使用$DESKTOP来指向桌面。例如: ```nsisCreateShortcut"$DESKTOP\MyApp.lnk""$INSTDIR\MyApp.exe"```步骤2:设置正确的Shell上下文默认情况下,$DESKTOP指向当前用户的桌面。如果要为所有用户创建快捷方式,需要: ```nsisSetShellVarContext all```注意:使用所有用户上下文需要管理员权限,因此在安装程序头部应请求管理员权限: ```nsisRequestExecutionLeveladmin```步骤3:处理64位系统问题在64位系统中,系统文件夹路径可能会被重定向。我们可以使用x64.nsh头文件来处理: ```nsis!include x64.nshSection${If} ${RunningX64}SetRegView64${EndIf};然后创建快捷方式CreateShortcut "$DESKTOP\MyApp.lnk" "$INSTDIR\MyApp.exe" SectionEnd```步骤4:验证路径如果仍然不确定路径,可以在安装时显示一个消息框来查看$DESKTOP的值:```nsisMessageBoxMB_OK"桌面路径:$DESKTOP" ```步骤5:检查VNISEdit向导设置在VNISEdit的向导中,确保在创建快捷方式步骤中选择了正确的目标文件夹(例如“桌面”)。步骤6:重新编译并测试修改后重新编译脚本,并在目标系统上测试。如果问题依旧,请检查是否有其他脚本部分修改了$DESKTOP变量,或者系统环境是否有特殊限制(如重定向了桌面文件夹位置)。示例完整代码片段: ```nsis;请求管理员权限(如果为所有用户安装) RequestExecutionLeveladmin!includex64.nshSection"Create Shortcut";设置上下文(根据需要选择current或all)SetShellVarContextall;如果是64位系统,设置注册表视图${If} ${RunningX64}SetRegView64${EndIf};创建桌面快捷方式CreateShortcut "$DESKTOP\MyApp.lnk" "$INSTDIR\MyApp.exe";可选:创建开始菜单快捷方式CreateDirectory "$SMPROGRAMS\MyApp"CreateShortcut "$SMPROGRAMS\MyApp\MyApp.lnk""$INSTDIR\MyApp.exe"SectionEnd```注意事项: -如果为所有用户创建快捷方式,在Vista及更高版本上,如果没有管理员权限,创建会失败。-桌面路径可能被用户自定义,但$DESKTOP变量会正确指向系统定义的桌面路径。如果上述步骤仍不能解决问题,可能需要更深入地检查系统环境或使用绝对路径(但一般不推荐,因为不同用户的桌面路径不同)。相关问题:1.如何为NSIS安装包添加自定义图标而非默认快捷方式图标?2.VNISEdit中如何实现安装后自动创建桌面快捷方式的复选框选项?3.NSIS脚本中如何处理不同Windows版本的特殊文件夹路径差异?4.如何通过NSIS检测并删除旧版本残留的无效快捷方式?</think>### NSIS 脚本创建桌面快捷方式路径错误解决方案 当使用 `CreateShortcut` 命令创建桌面快捷方式时路径不正确,通常由以下原因导致。以下是系统排查和修复步骤: #### 1. **验证路径变量** [^1] ```nsis !include LogicLib.nsh Section ; 显示实际路径值用于调试 MessageBox MB_OK "DESKTOP路径: $DESKTOP" MessageBox MB_OK "INSTDIR路径: $INSTDIR" SectionEnd ``` - 如果 `$DESKTOP` 显示异常路径,说明系统变量识别错误 - 如果 `$INSTDIR` 显示异常,说明安装目录设置有问题 #### 2. **强制指定正确路径** ```nsis CreateShortcut "C:\Users\Public\Desktop\MyApp.lnk" "$INSTDIR\MyApp.exe" ``` > **临时解决方案**:直接使用绝对路径测试是否工作(不推荐长期使用) #### 3. **修复系统上下文** [^2] ```nsis Section ; 显式设置上下文(二选一) SetShellVarContext current ; 当前用户 ; SetShellVarContext all ; 所有用户(需管理员权限) ; 创建带自定义图标的快捷方式 CreateShortcut "$DESKTOP\MyApp.lnk" "$INSTDIR\MyApp.exe" "" "$INSTDIR\icon.ico" 0 SectionEnd ``` #### 4. **处理64位系统路径重定向** ```nsis !include x64.nsh Function .onInit ${If} ${RunningX64} SetRegView 64 ; 使用64位注册表视图 ${EnableX64FSRedirection} ; 启用文件系统重定向 ${EndIf} FunctionEnd ``` #### 5. **特殊文件夹路径验证** 使用系统API获取真实桌面路径: ```nsis !define CSIDL_DESKTOP 0x0010 Section System::Call 'SHGetSpecialFolderPath(i $HWNDPARENT, t .r0, i ${CSIDL_DESKTOP}, i 0)' CreateShortcut "$0\MyApp.lnk" "$INSTDIR\MyApp.exe" SectionEnd ``` #### 6. **VNISEdit 向导配置检查** 在向导界面: 1. 进入"创建快捷方式"步骤 2. 确认: - ☑️ "创建桌面快捷方式"已勾选 - 📁 "目标文件夹"显示为`$DESKTOP` - 🖼️ 图标路径正确(如`$INSTDIR\app.ico`) #### 7. **权限问题处理** 在脚本开头添加: ```nsis RequestExecutionLevel admin ; 请求管理员权限 ManifestDPIAware true ; 解决高DPI缩放问题 ``` > **测试建议**:编译后右键安装包选择"以管理员身份运行"测试快捷方式创建
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值