Search code examples
c#exceptiondirectoryunauthorizedunauthorizedaccessexcepti

C# - UnauthorizedAccessException in Directory.CreateDirectory()


I'm new at C#, but I guess I'm using a simple command in Directory.CreateDirectory, and while I was only building in my own PC everything was fine. But when I published it and opened the app in other PC, it has thrown this exception, and I have found no answers on how to fix it on the code source. I tried to run it as admin in Win7, but didn't work also. Here's the code. It's in portuguese, but I don't think it'll be a problem :)

Thank you all so much.

string diretorio = @"C:\Program Files\LAPER\EqNumDPI\Edifícios\" + NomeEdificio;

        if (MessageBox.Show("Você tem certeza de que inseriu os dados corretamente?\nEsses campos não poderão ser alterados posteriormente.",
            "[LAPER] Cálculo do EqNumDPI", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning,
            MessageBoxDefaultButton.Button2) == DialogResult.OK)
        {
            TelaAdicionarAmbiente Tela = new TelaAdicionarAmbiente();
            if (!Directory.Exists(diretorio))
            {
                Directory.CreateDirectory(diretorio);
                StreamWriter file2 = new StreamWriter(@"C:\Program Files\LAPER\EqNumDPI\Edifícios\"+NomeEdificio+"\\metodo.txt", true, Encoding.ASCII);
                if (rBArea.Checked) file2.Write("AREA");
                else file2.Write("ATIVIDADE");
                file2.Close();
                this.Close();
            }
            else
            {
                MessageBox.Show("Nome de edifício já existe.\nPor favor, insira outro nome.",
                    "[LAPER] Cálculo do EqNumDPI",MessageBoxButtons.OK,MessageBoxIcon.Stop);
            }
        }

Solution

  • If it's not Oded's answer, then the issue could be the location of the exe file. If it's being run from a network volume, its permissions will be lower.

    You should look into strong-name keys, using them to sign your applications, and working with your network administrator to "trust" assemblies signed by that strong name key.

    Reference:

    http://msdn.microsoft.com/en-us/library/h4fa028b(v=vs.80).aspx

    Also - if you're on Vista or Windows 7, your app won't be able to write/create anything in the Program Files directory unless you run it as an administrator.