Mohammad Tavoosi Ответов: 3

Как запустить программу C# от имени администратора при запуске?


У меня есть программа на c#, которая запускается при запуске
Я собираюсь запустить эту программу от имени администратора при запуске
Пожалуйста, помогите мне

Что я уже пробовал:

Я попробовал этот код в файле app.manifest для запуска программы от имени администратора, но программа не запускается при запуске :
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

3 Ответов

Рейтинг:
2

Richard Deeming

Если вы поместите ярлык в папку "startup" и установите приложение для запуска от имени администратора, оно не будет работать. Windows заблокирует запуск приложения и покажет значок в трее, чтобы позволить пользователю запустить программу.

Вместо этого вам нужно будет использовать планировщик задач Windows для запуска вашей программы:
Делаем запуск в Vista контроль учетных записей ограничено программ при запуске Планировщика заданий - издания TechRepublic[^]


Mohammad Tavoosi

Я поместил адрес exe-файла в реестр, и он работает с образцом программы, но не работает с программой запуска от имени администратора.
пожалуйста, помогите мне

Richard Deeming

Как я уже сказал, Windows заблокирует запуск программ с повышенными правами. Вам придется использовать планировщик заданий.

Рейтинг:
1

RickZeeland

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

// Program

        public static bool IsAdministrator()
        {
                WindowsIdentity identity = WindowsIdentity.GetCurrent();
                WindowsPrincipal principal = new WindowsPrincipal(identity);
                return principal.IsInRole(WindowsBuiltInRole.Administrator);
        }


// Form1

        private void Form1Shown(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            this.Run1();
            this.Cursor = Cursors.Default;
        }

        private void Run1()
        {
            if (!Program.IsAdministrator())
            {
                // Restart and run as admin
                var exeName = Process.GetCurrentProcess().MainModule.FileName;
                ProcessStartInfo startInfo = new ProcessStartInfo(exeName);
                startInfo.Verb = "runas";
                startInfo.Arguments = "restart";
                Process.Start(startInfo);
                Application.Exit();
            }
		}


Mohammad Tavoosi

спасибо

RickZeeland

Обновлено с исходным кодом, как и было обещано :)

Рейтинг:
1

Wendelius

Также одним из вариантов является запуск нового процесса с повышенными привилегиями. Взгляните на пример в Варианте 2 в начале статьи Размер каталога браузера[^]