我在使用CopyFiles
命令和从UninstallString注册表中读取的值时遇到了困难。 UninstallString的值为"C:\myapp\uninstall.exe"
(带引号)。
如果我尝试以下操作,则无效。
CopyFiles $uninstallPath "C:\Temp" # Does not work
接下来,我编辑注册表并从UninstallString的值中删除引号,使其为C:\myapp\uninstall.exe
。
以下作品,但不包含引号。
CopyFiles $uninstallPath "C:\Temp" # Works
现在我在变量周围添加引号并且它可以正常工作。
CopyFiles "$uninstallPath" "C:\Temp" # Works
我觉得第一个也是最后一个例子是做同样事情的两种不同方式。为什么第一个例子不起作用的任何清晰度?
答案 0 :(得分:1)
您正在将苹果与橙子进行比较,或者在您的情况下,将报价与剥离的报价进行比较。
编译器删除.nsi中参数的最外层引号
commit -a
与
完全相同public static final double EPSILON = 0.0000000001;
public boolean compare(double a, double b) {
return Math.abs(a-b) < EPSILON;
}
但是,如果您在用户计算机上的变量中读取字符串,则不会删除任何引号:
StrCpy $0 "Hello World"
MessageBox mb_ok $0
NSIS forum上有一个包含许多不同解决方案的主题。以下是我对这种功能的看法:
StrCpy $0 "Hello World"
MessageBox mb_ok "$0"
在将我的函数复制到.nsi后,您的代码看起来应该是这样的:
StrCpy $0 '"Hello World"' ; Pretending that we read "Hello World" (with quotes) from somewhere
MessageBox mb_ok $0