日期:2014-05-17  浏览次数:21373 次

win7 NSIS安装包: 以管理员身份运行的程序 怎么获得系统当前用户的信息
比如,当前用户不是管理员,一旦以管理员身份运行程序,程序中USERPROFILE环境变量的值,就变成管理员的USERPROFILE了,有没有办法在程序中获取系统当前用户(非管理员)的USERPROFILE值?

说说出现这个问题的背景,我自己做了个安装程序, 它的安装目录不是由用户选的,而是固定安装在当前用户的目录,比如,Win7下用户名为abc时, 是安装到这里:"C:\Users\abc\AppData\XXXSoft\",也就是说,每个用户安装以后,都在不同的目录。
但我是用NSIS做的安装包, NSIS安装包是以管理员身份运行的,结果,全安装到一起了(都安装到管理员目录了),晕。。。

希望有达人帮助我, 感激~~

------解决方案--------------------
可以通过注册表项获取。
在 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList] 项下
以管理员身份运行时,除了当前登录帐户对应的项下的 refcount 值等于 1 外,administrator 帐户对应的项(S-1-5-domain-500)下的 RefCount 也会大于 0。

因此,只需要查找到除 S-1-5-domain-500(对应 administrator 帐户)和 S-1-5-18(对应 system 帐户)以外的,refcount 等于 1 的项,就可以定位当前登录帐户所使用的配置目录(项下的 ProfileImagePath 值)。
------解决方案--------------------
我想一定有某个wmi函数可以判断当前控制台登录的用户名,就如同我们在任务管理器用户标签看到的谁是console一样

可惜找不到资料
------解决方案--------------------
wmic path win32_computersystem get username
可以获取当前的登录帐户