Windows Server 2008 R2远程服务安装:在C#中连接RDP后如何执行程序?

Windows Server 2008 R2远程服务安装:在C#中连接RDP后如何执行程序?,c#,windows,service,rdp,C#,Windows,Service,Rdp,我想在安装Windows服务的Win2k8R2服务器Web Edition上远程启动一个程序 只有在存在“屏幕>0”的情况下才可以安装服务-这意味着用户必须登录才能安装服务(我在某个地方看到登录对话框窗口代表“屏幕0”,如果我在这里出错,请更正)。 因此,为了获得一个屏幕,我打开一个RDP连接,然后触发setup exe,它以静默方式安装所有内容 我已经让它在WindowsServer2003上运行了。在2008 R2上,虽然它不再工作了。 我想可能有一些安全策略,甚至完全其他的技术来实现我想要

我想在安装Windows服务的Win2k8R2服务器Web Edition上远程启动一个程序

只有在存在“屏幕>0”的情况下才可以安装服务-这意味着用户必须登录才能安装服务(我在某个地方看到登录对话框窗口代表“屏幕0”,如果我在这里出错,请更正)。 因此,为了获得一个屏幕,我打开一个RDP连接,然后触发setup exe,它以静默方式安装所有内容

我已经让它在WindowsServer2003上运行了。在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没有被执行吗?我没有任何错误,只是没有启动

或者有人知道远程安装服务的更好方法吗


提前谢谢

您不需要调用Disconnect()。当使用StartProgram方法时,您使用的是过去称为“备用外壳”的方法。这意味着当程序终止时,会话将自动关闭/断开

请参阅,搜索“AlternateShell”

我最近编写了一个ActiveX库,它使用StartProgram参数启动Windows 2008 RDS会话。一旦用户关闭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;