安装C#应用程序写入权限

时间:2014-02-07 17:01:56

标签: c# xml save

我有一个已安装的C#应用​​程序,但该程序需要能够读写xml。我测试了已安装的程序,如果它存在,它可以读取xml但是程序关闭时会出现异常。

有人可以帮助我。

我创建xml的当前方式是这样的:

private void SaveQuickLinks(List<QuickLinksData> QuickLinks)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("QuickLinks.xml");
            doc.RemoveAll();


            XmlElement Root = doc.CreateElement("", "QuickLinksList", "");
            doc.AppendChild(Root);

            foreach (QuickLinksData QuickLink in QuickLinks)
            {
                //Create New QuickLink
                XmlElement LinkElement = doc.CreateElement("", "QuickLink", "");
                Root.AppendChild(LinkElement);

                //Create Element With QuickLink Name
                XmlElement QuickLinkName = doc.CreateElement("", "LinkName", "");
                XmlText LinkName = doc.CreateTextNode(QuickLink.Link_Name);
                QuickLinkName.AppendChild(LinkName);
                LinkElement.AppendChild(QuickLinkName);

                //Create Element with QuickLink Link
                XmlElement QuickLinkURL = doc.CreateElement("", "LinkURL", "");
                XmlText LinkURL = doc.CreateTextNode(QuickLink.Link_URL);
                QuickLinkURL.AppendChild(LinkURL);
                LinkElement.AppendChild(QuickLinkURL);
            }

            //File.SetAttributes("QuickLinks.xml", FileAttributes.Normal);
            //doc.Save("QuickLinks.xml");

            using (var file = new FileStream("QuickLinks.xml", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
            {
                doc.Save("QuickLinks.xml");
            }
        }

每次我的应用程序关闭时,我都需要能够覆盖它。

2 个答案:

答案 0 :(得分:0)

每个C#程序都具有正在执行它的用户的权限,不在应用程序级别进行管理。检查执行程序的用户是否具有对保存文件的位置的写访问权(这似乎是程序的工作目录 - 通常是二进制文件所在的文件夹,但可能不同)。

E.g。如果您将其安装到C:\Programme Files,并以普通用户身份运行,那么它可能没有对此目录的写入权限(默认情况下您需要管理员权限)。考虑将文件移动到例如%APPDATA%

答案 1 :(得分:0)

检查访问权限并向访问此文件的用户授予写入权限。 默认情况下安装c#应用程序时会转到 C:\ Program Files \'您的应用程序',创建/覆盖C:\ Program Files下的文件不是一个好习惯。

我遇到过这个问题,并为我的应用程序提出了这个解决方案

  1. 在您的用户个人资料下创建一个包含应用程序名称的目录(对于Windows 7, C:\ Users \'Application Name')。用户可以完全访问其用户个人资料
  2. 将此文件放在该目录中,并使用以下代码获取文件路径

    string filePath = System.IO.Path.Combine(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),“Application Name”),“File Name”);

    < / LI>