代码之家  ›  专栏  ›  技术社区  ›  Stuart Helwig

如何确保Windows应用程序和Windows服务在Win2008 x64上访问相同的程序数据?

  •  0
  • Stuart Helwig  · 技术社区  · 17 年前

    我有一个Windows窗体应用程序,它用Windows服务必须处理的信息读取和更新XML文件。

    这已经在WindowsServer2003、XP和Vista(x32)上工作了一段时间。

    现在,当安装在Windows Server 2008 x64上时,奇怪的事情已经开始发生了,这要归功于用户“virtualstore”文件夹重定向的安全安排(正如您所说,我还不完全理解)。

    Windows窗体应用程序希望在C:\user\username\app data\local\virtualstore\program data\appname中创建、读取和更新文件,但服务似乎很乐意从C:\program files\appname中的文件读取数据…

    结果是他们正在查看不同的数据。

    现在,如果我通过“属性/兼容性”选项卡将这两个可执行文件都设置为“以管理员身份运行”,那么这个问题就会消失,C:\Program Files\AppName中的文件将按预期使用。

    然而,这感觉不太理想。

    正如你可能知道的,我并不真正了解这里工作的大多数问题/因素。

    这个问题可能过于宽泛,无法很好地回答堆栈溢出的问题,但是否有人能指出正确的方向,或提醒我需要了解什么,以便我的应用程序能够在Win2008 x64环境中正常工作,并继续像现在一样在XP、Vista x32等环境中工作。

    我的用户群完全不是技术性的,所以我不想强迫他们进行技术性的“幕后”更改——如果可能的话,我希望安装程序为他们处理这个问题。

    1 回复  |  直到 17 年前
        1
  •  1
  •   hplbsh    17 年前

    根据您的问题,您似乎正在将数据存储在C:\Program Files\AppName中

    您不应该将任何用户或应用程序修改的数据存储在C:\Program文件中,它应该只包含安装时编写的静态可执行文件和支持文件。只需从一开始就将这些内容存储在程序数据中。

    您应该从环境变量allusersprofile中获取程序数据的路径(这也意味着它将在xp上工作,并指向所有用户)。或者,如果希望每个用户都有数据,请使用用户配置文件。

    这都是由于安全性的变化,但是发生的目录虚拟化可能会非常混乱。特别是,如果您以管理员身份安装(所以一切都按预期进行),然后以普通用户身份运行(从其他地方开始)。