论坛风格切换切换到宽版
  • 3674阅读
  • 5回复

[讨论]nsis中不能使用变量的地方 [复制链接]

上一主题 下一主题
离线foolman
 
发帖
220
金钱
0
威望
0
只看楼主 倒序阅读 0 发表于: 2005-09-20
比如说复制文件,
setoutpath 可以用变量,copyfiles也可以用变量,rename更可以用变量,惟独file无法用变量,测试了N遍都是如此。
比如:
strcpy $R1 "c:\aa\a.txt"
strpcy $R2 "c:\aa\*.bat"
file $R1
file $R2
这样的话,怎么也无法通过编译。 帮助文件中,却看不到有提示说该命令不能使用变量。呵呵
离线restools

发帖
2848
金钱
1430
威望
143
只看该作者 1 发表于: 2005-09-21
想想就应该觉得不可能啦。因为 File 命令是要打包文件的,如果源文件的路径不确定,File 命令去哪找文件去打包啊。而变量是在运行时才会有数值在里面的,而在编译时变量是没有值的,而 File 命令恰恰就要在编译时就要去找文件打包。你说这样可不可能用变量啊。

PS: 正如 INNO 的 [Files] 中的 Source: 参数一样,在里面不能有一些运行时的变量,例如 {app}, {tmp} 等等。
我的BLOG:   http://restools.hanzify.org (Inno Setup 增强版, 插件 发布站点)
离线foolman
发帖
220
金钱
0
威望
0
只看该作者 2 发表于: 2005-09-21
  原来file是在编译时就要有确定的值?
  那么请教delete为何也是这样呢?
4.9.1.1 Delete
[/REBOOTOK] 文件从目标系统删除文件(可以是文件或通配符,但必须指定一个完整的路径)。如果指定了 /REBOOTOK 并且该文件当前不可删除,则会在系统重启时删除该文件 -- 如果该文件要在系统重启时删除,你还要设置一个重启的标记。如果找到的文件不能被删除则会置一个错误标记。但该错误标记不是为尝试删除一个不存在的文件设置的。

Delete $INSTDIR\somefile.dat

帮助的举例里,明明可以用$instdir这样的变量的。

  我正写的一个脚本,通过判断几个有共性的程序,其程序名不同,但性质一样。 我先备份它们的原来程序,事后再想恢复它们。 恢复时就遇到麻烦了: 首先,无法用delete $1这样的命令来删除改动过的程序,然后,我用copyfile $2 $1或rename $2 $1这样的命令,改动过的程序却不会被覆盖。
  因为是好几个程序,通过一个统一的程序来处理,不用变量的话,不仅整个脚本要重写,而且还会相当冗长,因为不用变量,都要用绝对路径。
  这方面,有没有什么比较好的办法呢?
离线蓝色网际
发帖
1795
金钱
0
威望
0
只看该作者 3 发表于: 2005-09-21
也许是文件正在使用而无法删除吧。
不要在 PM 里问问题,PM 不是用来问问题的。
离线foolman
发帖
220
金钱
0
威望
0
只看该作者 4 发表于: 2005-09-21
谢谢restool和蓝色网际, 仔细检查脚本后,发现问题正如蓝色网际所说,确实要删除的文件正在使用中……
离线星星子
发帖
102
金钱
0
威望
0
只看该作者 5 发表于: 2005-09-21
的确!是那样做了!!同意楼上说法!