【发布时间】:2019-08-30 11:03:57
【问题描述】:
我正在尝试创建我的安装,它为每个用户和所有用户提供用户安装。
现在,如果假设 John 已在用户级别安装了软件,然后 Andy 尝试将其作为机器级别安装在同一系统上,我如何检测到它已在用户级别为 john 安装并卸载它或中止安装?
因为我在机器级别和用户级别安装时具有不同的功能。我不希望机器上出现冲突的情况。
理想情况下,我想检查软件是否在用户级别安装,然后在机器级别安装时从用户级别安装。
我正在使用 InstallShield 2016 创建安装程序。
【问题讨论】:
-
MSI API: MsiEnumProductsEx 可以列出已安装的产品。我还没有真正使用过它,我知道在为其他用户枚举所有安装时存在问题。当您使用较旧的 MsiEnumProducts 函数时,您将获得启动用户的每用户安装。对于较新的功能,我认为您必须指定用户 SID 以列出为该用户安装的所有软件包。不是100%确定。给github.com搜索一下?
-
不确定NetUserEnum 是否为您提供了所有使用域帐户登录的用户。只需将其添加到此处以供参考,或许可以为您提供一些帮助。
-
@SteinÅsmul 感谢您的回复。 NetUserEnum 没有返回登录到特定机器的域用户。如果您查询域控制器,它要么返回本地系统的所有用户,要么返回域的所有用户。
-
第三个参数:
DWORD filter- 我使用了FILTER_NORMAL_ACCOUNT- 我现在无法测试域的东西。 NetUserEnum documentation。很快就会看看我的书签。 -
@SteinÅsmul 我使用以下注册表项来获取计算机上登录用户的所有 SID。 IT 既有本地用户,也有域用户。我已经在 windows 7 上测试过它工作正常。 HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList。
标签: windows-installer installation installshield