在我的安装程序脚本中,我有:
Section "Installer Section" SecInstaller
LogSet on
...
LogText "$APPDATA\MyDir"
SetOutPath "$APPDATA\MyDir"
File "SolutionTree.lic"
...
LogText "Installation complete."
SectionEnd
以及日志的相关部分:
...
C:\Users\{user}\AppData\Roaming\MyDir
CreateDirectory: "C:\Users\{user}\AppData\Roaming\MyDir" (1)
...
同时在卸载程序上我有:
Section "Uninstall" SecUninstaller
LogSet on
...
LogText "Deleting $APPDATA\MyDir\MyFile.txt"
Delete "$APPDATA\MyDir\MyFile.txt"
...
EsctionEnd
以及日志的相关部分:
...
Deleting C:\ProgramData\MyDir\MyFile.txt
Delete: "C:\ProgramData\MyDir\MyFile.txt"
...
如果我在两个安装程序中都使用
$APPDATA
(在安装程序中它指向正确的文件夹)为什么在卸载程序中它指向错误的文件夹?
您在卸载程序中调用
SetShellVarContext All
,这将为您提供 $AppData
的计算机/通用/所有用户版本。
您应该尝试在安装程序和卸载程序中使用相同的 SetShellVarContext 上下文。如果您使用
RequestExecutionLevel Highest
并支持每用户和计算机安装,则需要将上下文的状态保存在某处,以便可以在卸载程序中恢复它。
如果您只需要
$AppData
的用户版本而不关心上下文是什么,请使用 $UserAppData
...