2009-11-19 13 views

Respuesta

1

Habiendo bien cuidado en un archivo 'RDP' este es el contenido:

screen mode id:i:2 
desktopwidth:i:1280 
desktopheight:i:768 
session bpp:i:32 
winposstr:s:2,3,1430,104,2230,704 
compression:i:1 
keyboardhook:i:2 
displayconnectionbar:i:1 
disable wallpaper:i:1 
disable full window drag:i:1 
allow desktop composition:i:0 
allow font smoothing:i:0 
disable menu anims:i:1 
disable themes:i:0 
disable cursor setting:i:0 
bitmapcachepersistenable:i:1 
full address:s: [YOUR IP] 
audiomode:i:0 
redirectprinters:i:1 
redirectcomports:i:0 
redirectsmartcards:i:1 
redirectclipboard:i:1 
redirectposdevices:i:0 
autoreconnection enabled:i:1 
authentication level:i:0 
prompt for credentials:i:0 
negotiate security layer:i:1 
remoteapplicationmode:i:0 
alternate shell:s: 
shell working directory:s: 
gatewayhostname:s: 
gatewayusagemethod:i:4 
gatewaycredentialssource:i:4 
gatewayprofileusagemethod:i:0 
promptcredentialonce:i:1 
drivestoredirect:s: 

Apenas cree que como una cadena, parece sencillo.

ps no tengo idea de lo que el parámetro 'winposstr' es ...

+0

esto está perfectamente bien, pero mis RemoteApps están firmados digitalmente con un certificado, que añade 2 parámetros adicionales en mi archivo RDP: 1. signscope: s 2. Firma: s ¿Cómo puedo crear valores de estos parámetros , estos usan hash SHA1 ... ??? –

+0

No sé qué está pasando con estos certs. ¿No puedes crear un RDP válido de "aplicación remota" y luego copiar ese sig? o es el sig diferente cada vez? – Darknight

+0

La firma es igual cada vez, pero tengo que abrir diff. la aplicación en los botones de diferenciación, y la firma depende del nombre del programa de la aplicación remota, así que tengo que cambiar la firma sobre la marcha.Muestra el contenido del archivo RDP: –

2

que teníamos que hacer esta cosa exacta.

private void InvokeRDPSign(String fileName, String certificateThumbPrint) 
{ 
    Process signingProcess = new Process(); 
    signingProcess.StartInfo.FileName = @"rdpsign.exe"; 

    String arguments = String.Format("/sha1 {0} {1}", certificateThumbPrint, fileName); 
    signingProcess.StartInfo.Arguments = arguments; 
    signingProcess.StartInfo.UseShellExecute = false; 
    signingProcess.StartInfo.RedirectStandardOutput = true; 
    signingProcess.StartInfo.WorkingDirectory = Environment.SystemDirectory; 
    signingProcess.Start(); 

    String signingOutput = signingProcess.StandardOutput.ReadToEnd(); 
    signingProcess.WaitForExit(); 
    int exitCode = signingProcess.ExitCode; 
    //TODO: should we throw an error if the exitcode is not 0 

}

Tenga en cuenta que que el RDPSign.exe es diferente en cada versión de Windows. Descubrirá que una versión anterior de la utilidad ignorará las configuraciones más nuevas de la firma.

+0

Tuve que usar una cuenta elevada para la aplicación identidad del grupo para hacer que esto funcione. Como han sugerido otras publicaciones, probablemente trasladaré este código a un servicio de la máquina con privilegios elevados en lugar de cambiar permanentemente la identidad del grupo de aplicaciones. – Jason

Cuestiones relacionadas