【问题标题】:Xml file are saved in two different pathxml文件保存在两个不同的路径
【发布时间】:2013-01-20 07:45:24
【问题描述】:

我创建了将一些数据存储到 XML 文件的应用程序。问题在于 XML 保存的路径。我正在使用 TinyXML 将数据保存在 vc++ 中。

当我部署这个应用程序时,它安装在"C:\Program files(x86)\applicationname " 中,当我运行应用程序时,XML 文件保存在

"C:\Users\UserName\AppData\Local\VirtualStore\Program Files (x86)\ApplicationName ".

我已经让这个应用程序在系统启动时工作。所以当我重新启动这个应用程序时, xml文件存储在不同的路径"C:\Users\UserName\AppData\Local\VirtualStore\windows\sysWOW64"

我希望我的 XML 存储在我安装的路径中或应该存储在 appdata、应用程序名称中

如何将 XML 文件存储在安装应用程序的一个位置?

doc.SaveFile( "test.xml" ); // xml saving code in tinyxml library

【问题讨论】:

    标签: c++ xml visual-c++ windows-installer tinyxml


    【解决方案1】:

    首先,这与 C++ 无关,因为 C++ 代码可能正在运行。 XML 和 tinyxml 甚至 visual-c++ 也是如此。

    Windows 似乎会将这些写入访问重定向到特定于用户的“VirtualStore\Program Files”,但我会留给您研究它的实际语义。在启动时,当没有用户时,这条路径明显不同,因为之前的用户没有登录。

    现在,为了获得固定路径,您可以使用函数GetModuleFileName() 找出可执行文件的位置,并使用该路径定位 Smartmeter.xml。但是,您现在面临的问题是安装在“程序文件”下的程序不会神奇地获得对其安装目录的写访问权限。这是为了防止一个用户弄乱另一个用户的数据。

    我认为你正在做的是编写一个在后台运行的程序,这在 MS Windows 下被称为“服务”。仍然不清楚的是你想用这个文件实现什么,以及你总体上打算做什么,这些都是决定未来步骤的事情。无论如何,看看服务提供的可能性,也许有适合您需求的东西。

    【讨论】:

    • 非常感谢。很好地描述了我。实际上,我的应用程序时不时地监视 PC 活动。那么你是说如果用户没有登录,启动应用程序会将xml保存在不同的路径中?但是一旦我登录,xml应该存储在安装路径中。我现在该怎么办
    • 如果我以管理员身份运行我的应用程序,xml 会在安装路径中生成,如果我重新启动我的电脑,应用程序不会再次启动。没有进程在运行。但是如果我不是以管理员身份运行我的应用程序,xml 会在安装路径中生成,如果我重新启动 PC,应用程序会在后台运行,但会在不同的路径中生成 xml,即 sysWOW64
    • “后台进程监控 PC 活动”是否描述了您的程序?在这种情况下,您有一个服务的主要示例。您可以将服务配置为在启动时启动或允许用户启动它们。即使用户启动它,该服务也不一定在该用户的帐户下并以该用户的权限运行。更改目录之类的事情是作为转换为服务的副产品来解决的。还有一种方法可以将命令行程序作为服务运行,而无需将注册编码到程序本身中。摘要:考虑编写服务,它们完全符合您的情况!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    相关资源
    最近更新 更多