Vista上多用户WinForms应用程序的规则
我们为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吗?
问题是该应用程序必须可由任何用户安装和卸载,并且所有用户共享相同的数据文件。每个用户都有自己的偏好。
是否有一本书或者网站详细介绍了构建WinForms应用程序所需的详细内容,该应用程序在Vista上适用于多个用户的规则?
编辑:我与客户端进行了检查,并且仅在用户帐户确定的情况下才要求安装,他们正在从现场工作人员中删除管理员访问权限。这排除了管理员安装的组件和每台计算机的安装。
我当时正在考虑创建一个单独的数据应用程序,该应用程序将在管理机上运行,地板机将通过远程处理连接到该管理机上。所有客户端数据都将存储在此计算机上。但是,此应用还必须以用户帐户安装和运行。
是否有一本书或者网站描述了Vista用户应用程序必须遵循的所有规则?
解决方案
"该应用程序必须可由任何用户安装和卸载"
"所有用户共享相同的数据文件"
我们将不得不满足这两个要求。 Vista的新安全功能旨在防止用户相互踩踏(或者踩踏系统)。
我能想到的唯一途径是类似于我们在Windows 2000环境中处理需求的方式。我们将构建两个组件-应用程序的用户部分,以及管理用户之间共享的信息的系统组件。管理员将安装"共享"组件(包括运行它的Windows服务),每个用户都将安装"用户"组件。
我认为这可能适用于方案,但需要重新设计使用共享文件与服务进行通信的代码,而不是直接访问这些文件。
当然,我们也可以只拥有一个由用户以管理员身份运行的工具,以在特定位置创建文件夹并授予所需的安全权限。这可能也适合目的。
我们将遇到问题,不允许任何用户安装该应用程序,同时访问共享数据文件。这是因为第一个要求意味着每个用户的安装,而第二个要求则是每个计算机的安装。让我解释 ...
标准(基于MSI)安装程序的范围可以是按用户或者按计算机:
- 每用户安装将已安装的程序文件放在用户主目录下的某个位置。该应用程序仅为该用户安装。其他用户甚至在"开始"菜单或者"添加/删除程序"中都看不到该程序。如果需要该程序,则必须将其自己安装到每个用户区域。因此,可能安装了该程序的多个副本,并且每个副本都相互隔离。普通(非管理员)用户可以执行这种类型的安装,这就是为什么他们无法写入共享区域(例如"程序文件"或者"所有用户")的原因。
- 每台计算机的安装可以修改文件系统的共享区域(即"程序文件"或者"所有用户")。每个用户在开始菜单和"添加/删除程序"中都会看到该程序的相同副本。仅管理员用户可以执行这种类型的安装。
谢谢你们。我与客户核实后,确定仅以用户帐户身份安装的要求已确定,因为他们正在删除现场工作人员的管理员访问权限。这排除了管理员安装的组件和每台计算机的安装。
我们的解决方案是为我们的应用程序创建一个新的标准用户帐户。需要使用该应用程序的员工必须以该用户身份登录。实际上,这比在用户之间共享数据更好,因为现在我们可以在同一台计算机上为不同的客户端托管该应用程序。
我还找到了有关在Windows上制作多用户应用程序的重要参考,Microsoft Windows 7客户端软件徽标技术要求文档。