Windows 用户不是管理员时的 ReadXml 不同行为

如何解决Windows 用户不是管理员时的 ReadXml 不同行为

我知道这很疯狂,但我正面临一个意想不到且真正触发的问题。 启动时,我的应用程序(.net 4.7 fmk 中的 vb.net 桌面应用程序)读取一个 xml 文件,其中包含该应用程序的一些本地设置。 现在,问题是如果我以管理员身份登录 Windows,一切都很好。如果我以普通用户身份访问,则无法正确读取文件本身。该应用程序给了我这个错误

system.indexOutOfRangeException(0x80131508):位置 12 没有行。 在 System.Data.RBTree`1.GetNodeByIndex(Int32 userIndex) 在 System.Data.DaTarowCollection.get_Item(Int32 索引) 在 Health.NET.Frmlogin.OnLoad(EventArgs e)

在 XML 行 12 中实际存在。尽管用户登录 Windows,但 xml 文件是相同的。 两个更奇怪的效果: 1- 错误出现在第 12 行,但即使 xml 没有该设置的零值,也会读取前一些行返回零值。 2- 在 30 个客户端的环境中,此错误仅发生在一个客户端上。

这基本上是应用荣誉服务 7 年来第一次发生这种情况。

有没有人有任何线索来解决这个疯狂的问题??

这是我正在使用的一些原始代码。这是非常标准的代码

            Dim ds As New DataSet
Dim Path as string = ""
            path = Application.StartupPath & "\LocalConfig.xml"
            ds.readxml(path)

            ' Set theme and LabelsPrinter
            If Not ds.Tables.Item(0).Rows(0).Item(0).ToString = String.Empty Then
                theme.Name = ds.Tables.Item(0).Rows(0).Item(0).ToString
            End If

            If Not ds.Tables.Item(0).Rows(2).Item(0).ToString = String.Empty Then
                LocalConfig.labelsPrinterName = ds.Tables.Item(0).Rows(2).Item(0).ToString
            End If

到目前为止一切都是正确的,前面几行也是一样 但是当谈到这一点时:

            ' Set LabelsSettings
            If Not ds.Tables.Item(0).Rows(7).Item(0).ToString = String.Empty Then
                LocalConfig.LabelMarginTop = ds.Tables.Item(0).Rows(7).Item(0)
            End If

            If Not ds.Tables.Item(0).Rows(8).Item(0).ToString = String.Empty Then
                LocalConfig.LabelMarginLeft = ds.Tables.Item(0).Rows(8).Item(0)
            End If
  • 这些被读取但使用 0 值而不是给定的非零值

              If Not ds.Tables.Item(0).Rows(9).Item(0).ToString = String.Empty Then
                  LocalConfig.UseLabelSettings = ds.Tables.Item(0).Rows(9).Item(0)
              End If
    
              ' Set Other Settings
              If Not ds.Tables.Item(0).Rows(10).Item(0).ToString = String.Empty Then
                  LocalConfig.DefaultZoomMinutes = ds.Tables.Item(0).Rows(10).Item(0)
              End If
    
              If Not ds.Tables.Item(0).Rows(11).Item(0).ToString = String.Empty Then
                  LocalConfig.DefaultKeepActualPlanningOnAddNew = ds.Tables.Item(0).Rows(11).Item(0)
              End If
    
  • 前 3 行已正确读取

              If Not ds.Tables.Item(0).Rows(12).Item(0).ToString = String.Empty Then
                  LocalConfig.LabelPaperSizeX = ds.Tables.Item(0).Rows(12).Item(0)
              End If
              If Not ds.Tables.Item(0).Rows(13).Item(0).ToString = String.Empty Then
                  LocalConfig.LabelPaperSizeY = ds.Tables.Item(0).Rows(13).Item(0)
              End If
    
  • 尝试读取第 12 行会抛出错误,即使它实际上是在 XML 中

我再次坚持:以管理员身份登录,一切正常

请帮忙

编辑: 如果使用普通用户登录但以管理员权限启动应用程序,一切正常:-O 包含 xml 的文件夹具有对“所有人”集的完全控制

解决方法

评论太长了:问题可能是每个用户使用 ClickOnce 部署的应用程序的 Application.StartupPath 是不同的。我只是假设是这样,并且某个特定用户在该位置没有有效的 xml 内容。

根据the documentation

此路径将根据 Windows Forms 是否 应用程序是使用 ClickOnce 部署的。 ClickOnce 应用程序是 存储在 C:\Documents 和 设置\用户名目录。

问题在于它是如何实际部署的,以及您是否有权检查该环境以验证文件是否处于应有的状态。

如果是这样,请告诉我。如果没有,我将删除答案。谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?