Inno setup 标准Windows用户出现卸载程序故障

Inno setup 标准Windows用户出现卸载程序故障,inno-setup,uninstallation,elevated-privileges,Inno Setup,Uninstallation,Elevated Privileges,我想知道我是否遇到了与中讨论的Windows 10相同的错误 我在卸载一个由标准用户安装的程序时遇到了一个问题 我正在使用INNO安装程序,因此我的PrivilegesRequired=lowest,INNO不会提示提升权限,为当前用户安装,并在我的应用程序文件夹中创建一个卸载程序,例如uninst000.exe,我让INNO在我的应用程序的“开始”菜单组中为卸载程序添加一个图标(所有这些都是为当前用户完成的)。INNO还在Windows 10的设置/应用程序和功能小程序中添加了一个项目(这就是

我想知道我是否遇到了与中讨论的Windows 10相同的错误

我在卸载一个由标准用户安装的程序时遇到了一个问题

我正在使用INNO安装程序,因此我的PrivilegesRequired=lowest,INNO不会提示提升权限,为当前用户安装,并在我的应用程序文件夹中创建一个卸载程序,例如uninst000.exe,我让INNO在我的应用程序的“开始”菜单组中为卸载程序添加一个图标(所有这些都是为当前用户完成的)。INNO还在Windows 10的设置/应用程序和功能小程序中添加了一个项目(这就是问题所在)

如果从“开始”菜单图标启动卸载程序,则不会提示提升权限,并且我的应用程序卸载不会出现问题

如果从应用程序和功能启动卸载程序,将显示提升权限的提示,如果输入了管理员凭据(必须输入),则应用程序未正确卸载。有些东西是卸载的,但不是全部。应用程序文件被删除,开始菜单组被删除,但INNO的[UninstallRun]部分中的其他清理操作没有完成。此外,卸载项目不会从应用程序和功能的列表中删除


因此,我的问题是,这是由之前帖子中提到的Windows 10错误引起的吗?

我按照@MartinPrikryl的建议让卸载程序(即
初始化安装程序
)检查其运行的权限,并检查卸载项是否位于注册表的HKLM或HKCU区域。到目前为止,我的测试表明这种方法效果良好

函数IsRegularUser():布尔值;
开始
结果:=非(IsAdminLoggedOn或IsPowerUserLoggedOn);
结束;
函数wassenstandArduser():Boolean//如果卸载项位于注册表的当前用户区域中,则返回true
变量
sunistpath:String;
sunstallstring:String;
开始
sunistpath:=ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{{emit SetupSetting(“AppName”)}\u is1');
sUnInstallString:='';
结果:=真;
{这些键中只有一个应该存在,但如果两者都存在,则为nonadmin返回True}
如果RegQueryStringValue(HKLM、sUnInstPath、“卸载字符串”、sUnInstallString),则结果:=False;
如果RegQueryStringValue(HKCU、sUnInstPath、“卸载字符串”、sUnInstallString),则结果:=True;
结束;
函数初始化安装:布尔值;
开始
如果安装了asstandarduser()和(而不是IsRegularUser),则开始
MsgBox(MyApp是以标准用户权限安装的,因此必须以标准用户权限卸载。”#13“因此请使用开始/所有程序/MyApp/Uninstall。”,MB信息,MB#U确定);
结果:=假;出口
结束;
结果:=真;
结束;

我确实可以重现这个问题。作为一种解决方法,您可以让卸载程序检测到它正在提升运行,而安装程序在未提升的情况下运行,并显示如何正确运行它的说明。我按照您的建议让卸载程序检查它运行的权限,并检查卸载项是否位于注册表的HKLM或HKCU区域。另请参阅。