NSIS $AppData 在卸载时指向不同的文件夹。急于修复它吗?

问题描述 投票:0回答:1

在我的安装程序脚本中,我有:

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
(在安装程序中它指向正确的文件夹)为什么在卸载程序中它指向错误的文件夹?

nsis
1个回答
0
投票

您在卸载程序中调用

SetShellVarContext All
,这将为您提供
$AppData
的计算机/通用/所有用户版本。

您应该尝试在安装程序和卸载程序中使用相同的 SetShellVarContext 上下文。如果您使用

RequestExecutionLevel Highest
并支持每用户和计算机安装,则需要将上下文的状态保存在某处,以便可以在卸载程序中恢复它。

如果您只需要

$AppData
的用户版本而不关心上下文是什么,请使用
$UserAppData
...

© www.soinside.com 2019 - 2024. All rights reserved.