2012-06-13 4 views
3

Предположим, у меня есть сценарий, который должен читать информацию из мест, которые нормальный пользователь не может читать (например, папки других пользователей).Как поднять процесс Perl с помощью UAC

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

+0

Простейшим решением может быть создание ярлыка для вашего скрипта и установка ярлыка для запуска процесса в качестве администратора. – ikegami

+0

@ikegami Я считаю, что это эквивалентно щелчку правой кнопкой мыши и выбор «Запуск от имени администратора». К сожалению, этот параметр меню отсутствует для сценариев Perl, а также ярлыки для них, где соответствующий флажок, на который вы, по-видимому, ссылаетесь, отключен *. –

+0

Это просто вопрос определения 'perl.exe' как запускаемой программы. Передайте свой скрипт в качестве аргумента. (проверено) – ikegami

ответ

3

Согласно MSDN и PerlMonks, вы можете попробовать:

Win32::FileOp::ShellExecute(runas => 'yourprogram.exe') 

или

Win32::FileOp::ShellExecute(runasuser => 'yourprogram.exe') 

Они должны (не проверено) спрашивать возвышении, когда это необходимо. (Работает только с Windows 7).

Похожие: Requesting Administrator privileges during runtime

2

Если вы нормально с запуском через ярлык, вы можете использовать следующее:

  1. Создать ярлык perl.exe
  2. Редактировать ярлык.

    1. На вкладке Ярлык изменить "Target" в

      "с: ... \ Bin \ perl.exe" "C: ... \ script.pl"

    2. [Необязательно] На вкладке «Ярлык» измените «Начать в» на путь каталога, в котором находится ваш скрипт.

    3. На вкладке «Ярлык» нажмите «Дополнительно», затем установите флажок «Запуск от имени администратора».

Там есть инструмент под названием «runas», но я не могу заставить его работать, не спрашивая вас пароль администратора.

1

Устав, не имея хорошего ответа на этот вопрос в своей работе, написал Win32::RunAsAdmin. Все это делает вызовите консоль для Windows с помощью OLE с «RunAs» в качестве глагола, но упаковывает его удобно, так что все вы должны сделать, это вставить следующую строку в начале кода:

use Win32::RunAsAdmin qw(force); 

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