C # - UnauthorizedAccessException в Directory.CreateDirectory () - PullRequest
0 голосов
/ 04 ноября 2011

Я новичок в C #, но, думаю, я использую простую команду в Directory.CreateDirectory, и пока я только собирал свой собственный ПК, все было хорошо.Но когда я опубликовал его и открыл приложение на другом ПК, оно выкинуло это исключение, и я не нашел ответов о том, как это исправить в исходном коде.Я пытался запустить его как администратор в Win7, но тоже не сработало.Вот кодЭто на португальском, но я не думаю, что это будет проблемой:)

Большое вам спасибо.

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);
            }
        }

Ответы [ 2 ]

3 голосов
/ 04 ноября 2011

Обычно это исключение означает, что учетная запись, под которой запускается программа (по умолчанию учетная запись пользователя, вошедшего в систему), не имеет правильных разрешений для создания именованного каталога.

В MSDN это может сказать о UnauthorizedAccessException в документации для Directory.CreateDirectory:

У вызывающей стороны нет необходимых разрешений.

Предоставьте учетной записи правильные разрешения и всебудет хорошо.

1 голос
/ 04 ноября 2011

Если это не ответ Одеда, то проблема может быть в расположении exe-файла. Если он запускается с сетевого тома, его разрешения будут ниже.

Вам следует изучить ключи со строгими именами, использовать их для подписи своих приложений и работать с сетевым администратором, чтобы "доверять" сборкам, подписанным этим ключом со строгими именами.

Справка:

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

Кроме того - если вы работаете в Vista или Windows 7, ваше приложение не сможет ничего написать / создать в каталоге Program Files, если вы не запустите его от имени администратора.

...