1

我们有一个适用于 Windows XP 的 .Net WinForms 应用程序的 MSI 安装程序,它只能以管理员身份安装和运行。用户必须在应用程序运行时登录。客户希望它在 Vista 下的用户帐户下安装和运行,并使用他们的 Windows 帐户。

初步查看代码会发现很多问题;安装程序写入注册表并将应用程序安装在 C:\Program Files 中。该应用程序将用户首选项存储在注册表中,将数据写入 C:\Documents and Settings\All Users\,并在 C: 中创建临时文件。

我想首先要做的是将数据文件存储在 System.Environment.CommonApplicationData 中,并将用户首选项存储在 System.Environment.LocalApplicationData 中。用户帐户可以将应用程序安装到 System.Environment.ProgramFiles 吗?

一个问题是应用程序必须可由任何用户安装和卸载,并且所有用户共享相同的数据文件。每个用户都有自己的偏好。

是否有书籍或网站详细说明了构建一个遵循 Vista 上的多个用户规则的 WinForms 应用程序所需的条件?

编辑:我与客户核对过,仅作为用户帐户安装的要求是坚定的,他们正在从楼层工作人员那里删除管理员访问权限。这排除了管理员安装的组件和每台机器的安装。

我正在考虑创建一个单独的数据应用程序,该应用程序将在管理机器上运行,地板机器将通过远程处理连接到该管理机器。所有客户端数据都将存储在这台机器上。但是,此应用程序还必须在用户帐户下安装和运行。

是否有书籍或网站描述了 Vista 用户应用程序必须遵循的所有规则?

4

3 回答 3

1

“该应用程序必须可由任何用户安装和卸载” “所有用户共享相同的数据文件”

您将很难同时满足这两个要求。Vista 的新安全功能旨在防止用户互相践踏(和系统)。

我能想到的使这项工作的唯一方法是类似于我们在 Windows 2000 环境中处理类似需求的方法。您构建了两个组件——应用程序的用户部分,以及一个管理用户之间共享信息的系统组件。管理员安装“共享”组件(包括运行它的 Windows 服务),每个用户安装“用户”组件。

我认为这可能适用于您的方案,但它需要重新编写使用共享文件与服务对话而不是直接访问这些文件的代码。

当然,您也可以只使用用户以管理员身份运行的工具来在特定位置创建文件夹并授予所需的安全权限。这也可能适用于您的目的。

于 2008-09-26T21:09:40.850 回答
1

您将无法让任何用户安装该应用程序,同时访问共享数据文件。这是因为您的第一个要求意味着按用户安装,而第二个要求意味着按计算机安装。让我解释 ...

标准(基于 MSI)安装程序的范围可以是每用户或每台机器:

  • 每用户安装将安装的程序文件放在用户主目录下的某个位置。该应用程序仅为该用户安装。其他用户甚至看不到开始菜单中的程序,也看不到添加/删除程序。如果他们想要该程序,他们必须自己将其安装到他们自己的每个用户区域中。因此,可能安装了多个程序副本,并且每个副本都与其他副本隔离。这种类型的安装可以由普通(非管理员)用户执行,这就是他们无法写入“程序文件”或“所有用户”等共享区域的原因。
  • 每台机器安装可以修改文件系统的共享区域(即“程序文件”或“所有用户”)。每个用户都在开始菜单和添加/删除程序中看到相同的程序副本。只有管​​理员用户可以执行这种类型的安装。
于 2008-09-26T21:15:59.897 回答
0

多谢你们。我与客户核实,仅作为用户帐户安装的要求是坚定的,他们正在从楼层工作人员那里删除管理员访问权限。这排除了管理员安装的组件和每台机器的安装。

我们的解决方案是为我们的应用创建一个新的标准用户帐户。需要使用该应用程序的员工必须以该用户身份登录。这实际上比在用户之间共享数据更好,因为现在我们可以在同一台机器上为不同的客户端托管应用程序。

I also found a great reference for making multi-user apps on Windows, the Microsoft Windows 7 Client Software Logo Technical Requirements document.

于 2008-09-29T17:17:19.603 回答