nsis - 复制文件夹及其所有内容和子文件夹
问题描述
刚开始使用 NullSoft,我试图安装一个文件夹及其文件和子文件夹,我不知道出了什么问题,我可以帮忙吗?
OutFile "Autoclicker.exe"
InstallDir $PROGRAMFILES
Section
SetOutPath $INSTDIR
CopyFiles "C:\Users\cameron\Desktop\NullSoft\PH INSTALLER\Data\Autoclicker\Autoclickr.ink" "$DESKTOP"
WriteUninstaller $INSTDIR\Uninstaller.exe
File /r "C:\Users\cameron\Desktop\NullSoft\PH INSTALLER\Data\Autoclicker\"
SectionEnd
Section "Uninstall"
Delete $INSTDIR\Autoclicker
Delete $INSTDIR\Uninstaller.exe
SectionEndenter code here
解决方案
InstallDir
应在其路径中包含应用程序的名称,而不仅仅是要安装到的根目录。
CopyFiles
将文件从最终用户机器上的一个地方复制到另一个地方,它不能用于从您的安装程序中提取文件!它通常用于从 CD 复制文件或制作某些东西的备份副本。
与您一起使用该File
指令时,/r
应使用通配符文件规范来包含所有文件。
我建议您将代码更改为以下内容:
!define MySource "C:\Users\cameron\Desktop\NullSoft\PH INSTALLER\Data\Autoclicker"
InstallDir $PROGRAMFILES\Autoclicker
Section
SetOutPath $INSTDIR
WriteUninstaller $INSTDIR\Uninstaller.exe
File /r "${MySource}\*.*"
SetOutPath $Desktop
File "${MySource}\Autoclickr.ink"
SectionEnd
我不知道 .INK 文件是什么,但它听起来不像是属于用户桌面的东西。如果您实际上是指 .LNK (快捷方式/链接),那么您应该使用该CreateShortcut
指令来创建 .LNK 文件:
CreateShortcut "$Desktop\Autoclikr.lnk" "$InstDir\MyApp.exe"
最后,在您的卸载程序中,您必须使用RMDir /r
删除目录,而不是Delete
.
推荐阅读
- laravel - laravel 6:管理员和超级管理员重定向
- asynchronous - 如何在应用程序关闭时等待所有完成的 AsyncOperations
- java - 如何使用 Swingworker 显示进度条?
- git - gitlab作业运行时git权限被拒绝
- powershell - 从导入的 csv 文件创建打印机到多个打印服务器
- javascript - jquery toggleclass问题没有崩溃
- regex - 正则表达式匹配作为有效 URL 且不包含特定单词或者是特定字符串的字符串
- firebase - 在 Flutter 中使用 Firestore 获取不同集合中的文档列表
- java - 将默认容器工厂 bean 从 kafkaListenerContainerFactory 更改为我的自定义容器工厂
- sql - 在 SQL 中正确过滤日期