FileNotFoundException在DataSet.ReadXML期间指向\ bin \ debug \ application.exe

时间:2015-01-21 20:09:53

标签: c# visual-studio-2008 impersonation delegation

我正在编写一个名为“BatchReader”的C#解决方案。在这个应用程序中,我有一个从FileInfo对象实例化的XMLDocument对象。 FileInfo对象是通过从我的app.config文件获取一组文件夹路径创建的,并存储在名为uncPaths的String数组中。这些文件夹路径类似于:

  

\\ devServer \应用\ BatchReader \内向\误差

Boolean retVal = LogonUser("user", "domain", "pw",LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out safeTokenHandle);
if (!retVal)
{
int error = Marshal.GetLastWin32Error();
throw new Win32Exception(error);
}
using (safeTokenHandle)
{
   using (WindowsIdentity newID = new WindowsIdentity(safeTokenHandle.DangerousGetHandle()))
   {
      using (WindowsImpersonationContext impersonatedUser = newID.Impersonate())
      {
         foreach (String networkPath in uncPaths)
         {
            DirectoryInfo dir = new DirectoryInfo(networkPath);
            if(!dir.Exists)
            {
               continue;
            }

            FileInfo[] files = dir.GetFiles(fileMaskString);

            foreach(FileInfo file in files)
            {
               using (FileStream fs = file.OpenRead())
               {
                  xmlDoc = new XmlDocument();
                  xmlDoc.Load(fs);
               }

               XPathNavigator nav = xmlDoc.CreateNavigator();
               XPathNavigator searchNode = nav.SelectSingleNode(xPathQuery);

               if(searchNode!=null)
               {
                  DataSet xmlAsDataSet = new DataSet();
                  XmlNodeReader xnr = new XmlNodeReader(xmlDoc);
                  xmlAsDataSet.ReadXml(xnr);
               }
            }
         }

用户从一组下拉列表中进行选择,以确定xPath字符串和文件名掩码。单步执行代码,我知道我能够成功从这个FileInfo对象中检索数据。然后,我将此XML文档转换为DataSet以供以后处理。

当我在我的机器上运行此代码时,代码正确执行。但是,当我让测试人员在他们的机器上逐步执行代码时,当下面的代码行执行时,我得到一个FileNotFoundException:

xmlAsDataSet.ReadXml(xnr);

奇怪的是,此异常的错误消息指向我的应用程序的调试可执行(.exe)文件。 (例如:C:\ BatchReader \ bin \ Debug \ BatchReader.exe)。

有人可以解释为什么DataSet.ReadXML会以某种方式考虑BatchReader.exe文件的位置吗?

0 个答案:

没有答案