Как можно предотвратить ошибки «Отказано в доступе» с помощью System.Diagnostics.Process.Start - PullRequest
0 голосов
/ 25 августа 2011

Мое приложение WPF позволяет пользователям добавлять «вложения» (Word, Excel, текстовые документы и т. Д.). Приложение генерирует ошибки «Отказано в доступе» при попытке открыть файл в сети нашей компании. Ошибка возникает после выполнения Process.Start. Откроется приложение оболочки (т. Е. Блокнот для текстового файла), а затем появится сообщение «Доступ запрещен». Первоначально у меня были похожие ошибки при попытке записи файлов, но я исправил эту проблему с помощью класса Impersonator , найденного здесь .

Вот код проблемы:

using (Impersonator impersonator = new Impersonator())
{
    System.Diagnostics.Process process = new System.Diagnostics.Process();
    process.StartInfo.FileName = pathToDocument;
    process.StartInfo.UseShellExecute = true;
    process.Start();
}

Я получаю ту же ошибку при этом:

using (Impersonator impersonator = new Impersonator())
{
    System.Diagnostics.Process process = new System.Diagnostics.Process();
    process.StartInfo.FileName = pathToDocument;
    process.StartInfo.UserName = "uid";
    process.StartInfo.Domain = "domain";
    process.StartInfo.Password = new System.Security.SecureString();
    foreach (Char c in "password")
    {
        process.StartInfo.Password.AppendChar(c);
    }
    process.StartInfo.UseShellExecute = false;
    process.Start();
}

Развернутое приложение дает сбой, даже когда я жестко кодирую свой собственный идентификатор пользователя и пароль (у меня есть права «полный контроль» на чтение, запись, выполнение и т. Д.). Все работает нормально, если я изменяю путь к документу на другой общий диск с ослабленной безопасностью (где каждому предоставлен полный контроль). Приложение развернуто с основными настройками ClickOnce. Приложение не установлено на компьютере пользователя - оно доступно только онлайн. Что я должен сделать, чтобы предотвратить отказ в доступе?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...