修改 - 由于错误(see here - Same issue reported)
,此问题似乎是Windows 7和VistaEdit2 - 我可能遇到类似问题的用户使用PATH(我没有使用PATH,但结果相同 - Unanswered question with similar issues
我有一个Inno Setup脚本,它使用环境变量来定位文件夹并删除内容。当我尝试在没有提升权限的情况下扩展变量时,我得到了这个:
TEST_USER =%APPDATA%\ PROG \ USER_DATA(在Windows中设置)
如果我以管理员身份运行(或更改管理员权限),我会看到:
TESTUSER = c:\ users \ username \ appdata \ roaming \ PROG \ USER_DATA
谷歌搜索%APPDATA%问题显示其他人有这个问题,通常他们在PATH中使用时会遇到这个问题,这与在请求之前未设置的路径有关。
如果返回值包含%appdata%,我希望避免使用pos检查复杂的例程。但我认为这可能是我唯一的解决方案。
答案 0 :(得分:1)
这是我使其成功的答案。不过,请查看@Tobias81到InnoSetup, expand environment variable (taken from registry value using {reg:...} )的答案,该答案有效并提供更通用的解决方案。
我先制作多个模块,然后再组合制作一个包含多个组件的可执行文件,以便用户可以选择一个动作。因此,我需要检查变量的当前值而不是注册表值。此外,注册表仍会返回%APPDATA%
作为我的屏幕截图。
所以我的回答是只是寻找%APPDATA%
的外观并处理它。
这是我的调试程序。现在我可以找到它并处理它,允许我找到值,无论它是由父设置还是仅在Windows中设置。
procedure InitializeWizard;
var
test_user: string;
app_user: string;
folder_to_find: string;
begin
test_user := (ExpandConstant('{%TEST_USER}'));
app_user := (ExpandConstant('{%APPPDATA}'));
if (test_user <> '') AND (Pos(Uppercase('%APPDATA%'), Uppercase(test_user))=0) then
begin
folder_to_find := test_user;
MsgBox('Folder found : ' + folder_to_find + ' APPDATA STRING WAS NOT DETECTED', mbInformation, MB_OK)
end
else
if (test_user <> '') AND (Pos(Uppercase('%APPDATA%'), Uppercase(test_user))=1) then
begin
StringChangeEx(test_user, '%APPDATA%', '', True);
folder_to_find := app_user + test_user;
MsgBox('Folder found : ' + folder_to_find + ' APPDATA STRING WAS DETECTED & REMOVED!', mbInformation, MB_OK);
end
else
begin
MsgBox('The TEST_USER Environment is not set' + #13#10#13#10 + 'This process will now exit!',mbInformation, MB_OK)
Abort;
end;
end;