C# 安装应用程序wpf c后出现写入权限错误#

C# 安装应用程序wpf c后出现写入权限错误#,c#,wpf,installation,C#,Wpf,Installation,我目前的项目有一个问题。我正在开发一个wpf应用程序,其中有一个xml文件,需要在执行某些操作时进行更新。但是我在更新xml文件时遇到权限错误。这是我使用的代码。 public void createxml() { 尝试 { XmlWriterSettings=新的XmlWriterSettings(); settings.Indent=true; var outPutDirectory=System.IO.Path.GetDirectoryName(Assembly.getExecution


我目前的项目有一个问题。我正在开发一个wpf应用程序,其中有一个xml文件,需要在执行某些操作时进行更新。但是我在更新xml文件时遇到权限错误。这是我使用的代码。

public void createxml()
{
尝试
{
XmlWriterSettings=新的XmlWriterSettings();
settings.Indent=true;
var outPutDirectory=System.IO.Path.GetDirectoryName(Assembly.getExecutionGassembly().CodeBase);
var error=System.IO.Path.Combine(outPutDirectory,“foldername/filename.xml”);
string relsound=newURI(错误).LocalPath.Replace(@“\bin\Debug”,”);
writer=XmlWriter.Create(relsound,settings);
writer.WriteStartDocument();
WriteComment(“此文件由程序生成。”);
作者。书面声明(“类别”);
WriteAttributeString(“名称”、“QuickformsForm”);
填充子xml(o);
writer.writeedelement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
}
捕获(异常ae)
{
Show(ae.ToString());
}
}
/// 
///创建XML文件
/// 
/// 
公共空白填充子XML(Int16参数1)
{
尝试
{
数据集子集=新数据集();
db_op.Open();
subcat_SE=db_op.ExecuteDataSet(CommandType.Text,“选择查询”);
db_op.Close();
if(子目录表[0].Rows.Count>0)
{
对于(int k=0;k0)
{
对于(int j=0;j


当我通过右键单击该文件并转到“安全”选项卡来设置对此文件的完全访问权限时,我可以执行该操作。其他方面我不能。我试着用代码来设置它,但不幸的是,我的代码都不能正常工作。有人能帮我解决这个问题吗。我尝试了stackoverflow和其他网站的一些代码。
问候,

Sivajith

选择一个应用程序具有写入权限的位置来编辑XML文件,例如LocalApplicationData。我正在应用程序中使用一个文件夹。那会导致错误吗?是的,我想是的。应用程序目录中的写入权限受到限制。如果您使用应用程序应该写入的目录之一,您应该不会有问题。但是我没有检查你的密码!可能还有其他错误。从使用应用程序数据目录开始,您将看到。。
    public void createxml()
    {
        try
        {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            var outPutDirectory = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
            var error = System.IO.Path.Combine(outPutDirectory, "foldername/filename.xml");
            string relsound = new Uri(error).LocalPath.Replace(@"\bin\Debug", "");
            writer = XmlWriter.Create(relsound, settings);
            writer.WriteStartDocument();
            writer.WriteComment("This file is generated by the program.");
            writer.WriteStartElement("Category");
            writer.WriteAttributeString("Name", "QuickformsForm");
            fill_subXML(o);
            writer.WriteEndElement();
            writer.WriteEndDocument();
            writer.Flush();
            writer.Close();
        }
        catch (Exception ae)
        {
            MessageBox.Show(ae.ToString());
        }
    }
    /// <summary>
    ///  Create the XML file 
    /// </summary>
    /// <param name="parm1"></param>
    public void fill_subXML(Int16 param1)
    {
        try
        {
            DataSet subcat_SE = new DataSet();
            db_op.Open();
            subcat_SE = db_op.ExecuteDataSet(CommandType.Text, "SELECT query");
            db_op.Close();
            if (subcat_SE.Tables[0].Rows.Count > 0)
            {
                for (int k = 0; k < subcat_SE.Tables[0].Rows.Count; k++)
                {
                    writer.WriteStartElement("Category");
                    writer.WriteAttributeString("ID", subcat_SE.Tables[0].Rows[k][0].ToString().Trim());
                    writer.WriteAttributeString("Name", subcat_SE.Tables[0].Rows[k][1].ToString().Trim());
                    writer.WriteAttributeString("Flag", "C");
                    DataSet dt_formmaster_SE = new DataSet();
                    db_op.Open();
                    dt_f1_SE = db_op.ExecuteDataSet(CommandType.Text, "select query");
                    db_op.Close();
                    if (dt_f1_SE .Tables[0].Rows.Count > 0)
                    {
                        for (int j = 0; j < dt_f1_SE .Tables[0].Rows.Count; j++)
                        {
                            writer.WriteStartElement("Form");
                            writer.WriteAttributeString("ID", dt_f1_SE .Tables[0].Rows[j][0].ToString().Trim());
                            writer.WriteAttributeString("Name", dt_f1_SE .Tables[0].Rows[j][1].ToString().Trim());
                            writer.WriteAttributeString("Flag", "F");
                            writer.WriteEndElement();
                        }
                    }
                    fill_subXML(Convert.ToInt16(subcat_SE.Tables[0].Rows[k][0].ToString().Trim()));
                    writer.WriteEndElement();
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }