Perl-скрипт для запуска процесса, когда другой пользователь не работает должным образом - PullRequest
1 голос
/ 26 мая 2019

У меня есть скрипт Perl, который использует Win32 :: API и команду CreateProcessWithLogonW для запуска процесса от имени другого пользователя. Однако когда я запускаю этот скрипт из браузера, на экране сервера появляется следующее сообщение об ошибке:

"Не удалось правильно запустить приложение (0xc0000142). Нажмите« ОК », чтобы закрыть приложение.»

Тем не менее, я обнаружил, что если я остановлю Apache как службу и начну его напрямую, дважды щелкнув по httpd.exe, мой Perl-скрипт будет работать без проблем. Как я могу заставить его работать, когда Apache работает как сервис?

Мой код выглядит следующим образом:

#!C:\usr\bin\perl
use CGI::Carp qw(fatalsToBrowser);
use Win32::API;

sub A2W{ pack 'S*', unpack 'C*', $_[0] }

my $CreateProcessWithLogon = new Win32::API('advapi32.dll', 'CreateProcessWithLogonW', ['P','P','P','P','P','P','P','P','P','P','P'],'N') || return $^E;

my $si = pack('LLLLLLLLLLLL SS LLLL',68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1|0x100, 1, 0, 0, -1, -1, -1);

my $num=$CreateProcessWithLogon->Call(
    A2W( 'username' ),
    A2W( '\\.\ ' ),
    A2W( 'password' ),
    0,
    0,
    A2W( 'myprocess' ),
    0,
    0,
    0,
    $si,
    chr(0) x 100
) or die $^E;

print "Content-type:text/html\n\n";
print $num;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...