2009-12-31 2 views
4

У меня есть приложение, которое считывает файл лицензии при его запуске. Моя установка создает папку в Program Files для приложения, создает папку с лицензией и помещает там файл лицензии. Однако, когда я пытаюсь запустить приложение, ему необходимо прочитать/обновить файл лицензии. Когда я пытаюсь сделать это, я получаю «исключение несанкционированного доступа». Я зарегистрирован как администратор, и я запускаю программу вручную.Исключение неавторизованного доступа в Windows 7

Любая идея, почему я не могу получить доступ к этому файлу, даже если путь правильный? Но в установке он создает файл и папку просто отлично?

У меня есть MyApplication.exe, а мой читатель лицензий находится в отдельной DLL, называемой MyApplicationTools. Я читаю/пишу файл лицензии следующим образом:

 //Read 
     StreamReader reader = new StreamReader(path + "license.lic"); 

     //Write 
     StreamWriter writer2 = new StreamWriter(path + "License.lic"); 
     string str = Convert.ToBase64String(sharedkey.Key); 
     writer2.WriteLine(str); 
     writer2.Close(); 

Благодаря

+0

Вы уверены, что программа работает в качестве администратора? –

+0

Спасибо вам большое. Я был совершенно вне! Интересно видеть эту папку данных приложения! – user53885

ответ

4

Из-за контроля учетных записей, ваша программа не получает права администратора.

Щелкните правой кнопкой мыши программу, выберите «Запуск от имени администратора» и повторите попытку.
Вы также можете create a manifest that tells Windows to always run as Administrator.
Однако вы должны рассмотреть возможность размещения файла лицензии в папке AppData пользователя, которая не требует административных прав.


Кстати, вы должны использовать метод Path.Combine для создания пути.
Кроме того, если вы просто хотите написать одну строку в файл, вы должны позвонить File.WriteAllText.
Например:

File.WriteAllText(Path.Combine(path, "License.lic"), Convert.ToBase64String(sharedkey.Key)); 
2

Вы должны поместить записываемые файлы в папке приложения пользователя - Program Files не доступен для записи обычных пользователей. Iirc, в Win7 по умолчанию используется C: \ Users \ [имя_пользователя] \ AppData \ [appname]. Вы не должны запускаться как администратор для записи в Program Files.

3

Используйте вместо этого AppData. Для этого есть переменная среды. Вы можете это увидеть, зайдя в проводник и набрав% appdata%. Он доставит вас в соответствующую папку. Чтобы получить доступ к этому в C#, я написал следующую функцию.

/// <summary> 
    /// Gets the path where we store Application Data. 
    /// </summary> 
    /// <returns>The Application Data path</returns> 
    public static string GetAppDataPath() 
    { 
     string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
     dir = System.IO.Path.Combine(dir, "MyCompany\\MyApplication"); 
     System.IO.Directory.CreateDirectory(dir); 

     return dir; 
    } 
+1

'CreateDirectory' не будет бросать, если каталог уже существует, поэтому вам не нужно отдельно проверять. – SLaks