以管理员身份运行:访问用户VirtualStore

时间:2011-04-01 08:04:33

标签: c# .net windows-7 windows-vista nsis

我的软件安装/首次在Vista / 7上运行与VirtualStore有关。

我的软件是用C#编写的。安装人员:NSIS。

  1. 我的应用程序是使用NSIS安装的。它以管理员身份运行
  2. 安装完成后,用户可以立即从安装程序启动软件。
  3. 这导致程序的第一次运行以管理员身份执行。
  4. 在首次运行期间,必须完成向导。此向导将从计算机上已有的旧版软件导入数据(C:\ Program Files \ OldProgram \ Data)
  5. 但是,在7 / Vista上,此数据位于用户的VirtualStore中。当我是管理员时,我没有“看到”这些数据,我无法转换它。
  6. 问题:

    1. 我可以知道当前登录的是哪个用户吗?
    2. 是否有通用的方式来访问此用户的虚拟商店? 考虑到“Program Files”文件夹的名称不同是一些国家和64位我的应用程序位于“Program Files(x86)”。

1 个答案:

答案 0 :(得分:0)

  1. UserInfo :: GetName会为您提供用户名,如果您需要更多控制权,请使用UserMgr
  2. Windows并没有提供一种方法来访问其他用户没有令牌的特殊文件夹,但this helper macro在大多数情况下都有效。虚拟商店的名称/位置未记录AFAIK,因此您必须使用GetUserShellFolderFromRegistry获取最近的特殊文件夹,然后对该路径的VirtualStore部分进行硬编码...
  3. 如果您想以用户身份启动程序而不是执行安装的管理员,请使用UAC plugin(或者只删除完成页面上的运行复选框,让用户正常启动程序)