Установка удаленной службы Windows Server 2008 R2: Как выполнить программу после подключения RDP в C #? - PullRequest
0 голосов
/ 20 сентября 2011

Я хочу удаленно запустить программу на Win2k8R2 Server, Web Edition, которая устанавливает службы Windows.

Установка службы afaik возможна только при наличии «экрана> 0» - это означает, что пользователь должен войти в систему, чтобы сделать это (я где-то читал, что диалоговое окно входа в систему представляет «экран 0», поправьте меня, если я м здесь не так). Поэтому, чтобы получить экран, я открываю RDP-соединение и затем запускаю программу установки exe, которая устанавливает все без вывода сообщений.

Я заставил его работать на Windows Server 2003 уже. На 2008 R2, хотя это больше не работает. Я предполагаю, что может быть какая-то политика безопасности или даже совершенно другая техника для достижения того, чего я хочу.

Вот код:

this.axMsRdpClient7 = new AxMSTSCLib.AxMsRdpClient7();

// ... some GUI stuff happens here..

axMsRdpClient7.Server = hostname;
axMsRdpClient7.UserName = username;
axMsRdpClient7.AdvancedSettings.Compress = -1;
axMsRdpClient7.AdvancedSettings2.DisplayConnectionBar = true;
axMsRdpClient7.AdvancedSettings7.ClearTextPassword = userpassword;
axMsRdpClient7.AdvancedSettings2.EncryptionEnabled = -1;

// Set start program information. vvv THIS IS NOT GOING TO BE EXECUTED vvv
axMsRdpClient7.SecuredSettings.StartProgram = executablePath + " " + arguments;
axMsRdpClient7.SecuredSettings.WorkDir = workingDirectory;

// ... here I'm attaching some events like OnDisconnect...

// Start connection
axMsRdpClient7.Connect();

// Now the startprogram should be executed, but doesn't.
// (at this time its ok that I have to manually log off to reach disconnect. Except you have a better idea to disconnect after startprogram finishes)
while (axMsRdpClient7.Connected != 0)
{
    Application.DoEvents();
    Thread.Sleep(1);
}

// End connection
axMsRdpClient7.Disconnect();

Кто-нибудь знает, почему StartProgram не выполняется? У меня нет ошибок, просто не запускается.

Или кто-нибудь знает лучший способ удаленной установки служб?

Заранее спасибо!

1 Ответ

1 голос
/ 27 апреля 2012

Вам не нужно вызывать Disconnect (). При использовании подхода StartProgram вы используете то, что раньше называлось подходом Alternate Shell. Это означает, что когда программа завершается, сеанс автоматически закрывается / отключается.

См. http://msdn.microsoft.com/en-us/library/ms861803.aspx, для поиска 'AlternateShell'.

Недавно я написал библиотеку ActiveX, которая инициирует сеанс Windows 2008 RDS с использованием параметра StartProgram. Как только пользователь закрывает программу, которая запускается автоматически при запуске сеанса RDS, сеанс RDS автоматически завершается. Таким образом, вам не нужно ни механизм зацикливания, ни вызов Disconnect () с вашим подходом.

В своем коде для учетных данных пользователя я также указываю домен. Является ли ваша учетная запись учетной записью домена Windows? Если это так, то, вероятно, вам также необходимо это указать.

Дополнительно я установил следующие параметры:

// server authentication is required - set Auth level to 2
AdvancedSettings7.AuthenticationLevel := 2;
// use CredSsp if the client supports it.
AdvancedSettings7.EnableCredSspSupport := True;
// setting PublicMode to false allows the saving of credentials, which prevents
// prompting the user to log in
AdvancedSettings7.PublicMode := False;

НТН

...