【问题标题】:Winforms showing different values from xmlWinforms 显示来自 xml 的不同值
【发布时间】:2015-06-01 05:38:24
【问题描述】:

我有一个包含 Test.xml 文件的 Windows 服务项目。在属性中将其更改为始终复制。

我已经为服务创建了一个设置,安装服务后,Test.xml 出现在 C:\program files(86)\service 文件夹中。

现在我想通过 UI 编辑 Test.xml 文件。所以我创建了一个小型 Winforms 项目“EditXml”。 EditXml 正在像这样访问 Test.xml

document = XDocument.Load(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Test.xml"));

我也将 EditXml.exe 添加到服务设置中。所以安装服务后,EditXml.exe 也会出现在文件夹中。

但是当我使用 EditXml 进行编辑时,我看不到 test.xml 中的变化。

为什么值与 Test.xml 不同?这是一个正确的方法吗?如果问题不清楚,请告诉我。

【问题讨论】:

  • 不清楚。有什么区别?你如何比较文件?如何在小型应用程序中显示 xml 的值?
  • 我想在服务安装后编辑 C:\program files(86)\service 文件夹中的 xml 文件。假设 xml 包含一个值 50,那么我的 EditXml 应用程序显示不同的值。
  • 你是用xdocument的save方法写回文件吗?
  • 是的。我正在使用 xdocument 来保存。

标签: c# xml winforms windows-services


【解决方案1】:

我认为您的权限不足和 Windows 文件虚拟化存在问题。当您的安装程序在 Program Files 文件夹中创建文件时,它通常只设置读取操作的权限。

当您尝试使用以现在具有写入权限的用户帐户运行的应用程序修改文件时,Windows 会产生文件已成功写入的错觉,但会将其放入虚拟存储中 - 检查此类目录/文件是否存在在 c:\users\CurrentUserName\Local\VirtualStore\Program Files (x86)\YourFolderName

只有您的应用程序可以看到修改后的文件版本,但所有其他应用程序都可以看到安装程序编写的原始版本。

为了能够使用应用程序修改文件,您需要向文件添加写入权限。

【讨论】:

  • 如何设置Program Files文件夹内文件的写权限?
  • 您可以在安装后使用 Windows 对话框手动设置它 - 只是为了测试这是否真的是一个问题。如果您询问如何在设置服务中配置具有写入权限的文件,以便使用写入权限集进行安装,这取决于您使用的设置工具集。 (我知道如何使用 WiX 工具集进行配置,但可能不是你的情况。)
  • 我已经检查了 xml。它有写权限。
  • 如果您可以使用其他应用程序编辑文件并成功读取您的更改,我也会尝试。如果它有效,那么它可能是另一个问题。
  • 我可以使用另一个应用程序编辑 xml。但这些变化并没有反映出来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多