Создайте второе (консольное) приложение, которое будет выполнять предварительную запись, и добавьте его к ссылкам исходного приложения.
Когда ваш пользователь запускает приложение, проверьте, задан ли ключ реестра, еслине запускать вышеупомянутое консольное приложение с повышенными правами .Пользователю будет предложено ввести права администратора, и операция записи должна завершиться успешно.
В вашем основном приложении необходимо добавить ссылку на консольное приложение.Для облегчения ссылки на сборку консольное приложение должно иметь как минимум 1 открытый класс, чтобы вы могли получить его тип и типы assemblyml, и, таким образом, вам не нужно использовать магические строки для получения имен файлов.Пример:
Process.Start(
new ProcessStartInfo
{
Verb = "runas",
FileName = typeof(SomeClassInOtherAssembly).Assembly.Location,
UseShellExecute = true,
CreateNoWindow = true // Optional....
}).WaitForExit();
Я также нашел этот хороший пост в блоге.