繁体   English   中英

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

[英]Installed C# application write permissions

我已经安装了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");
            }
        }

每当我的应用程序关闭时,我都需要能够重写此内容。

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

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

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

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

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

    字符串filePath = System.IO.Path.Combine(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),“应用程序名称”),“文件名”);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM