Не обходите, используйте каталог «Application Data».
Program Files предназначен для хранения файлов, которые не изменяются во время работы приложения.Файлы, хранящиеся там, следует изменять только во время установки / обновления.
Файлы, которые необходимо изменить во время запуска приложения (профили, настройки и т. Д.), Должны храниться в каталоге «Данные приложения» в папке пользователя.
Для получения пути используйте передачу функции SHGetFolderPath :
CSIDL_APPDATA
- для получения каталога текущего пользователя «Данные приложения»
CSIDL_COMMON_APPDATA
- для получения каталога всех пользователей «Данные приложения»
(и в конечном итоге) CSIDL_LOCAL_APPDATA
- для получения текущего каталога «Local Application Data» текущего пользователя, который предназначен для хранения информации, относящейся только к локальной машине, которую нельзя переместить на другие машины, в отличие от «Application Data» (также называемой «Roaming Application»).Данные »), где файлы можно свободно перемещать с компьютера на компьютер (т. Е. Вы можете сохранить их во время переустановки ОС).
Если вашему приложению действительно нужно изменить каталог Program Files, то у пользователя запрашивается разрешение:ты должен сделать.Вы можете дать своему приложению специальный манифест, чтобы оно пыталось получить права администратора при каждом запуске.Вы также можете получить привилегии «на лету».
Если вы пишете конкретное приложение, которое практически не мешает ОС, то вы можете создать службу (демон).Каждый раз, когда сервис запускается, он получает привилегии, данные при регистрации сервиса.Для получения дополнительной информации см. «DLL, процессы и потоки -> Службы» в MSDN
// РЕДАКТИРОВАНИЕ
Вы также можете легко создать службу в .NET (C # наиболее подходит).Сервисное приложение может общаться с клиентским приложением, написанным на другом языке.Но для регистрации услуги вам понадобятся права администратора.С этим типом приложения вы должны рассмотреть все вопросы безопасности.