2008-11-25 31 views
7

En la pequeña aplicación que estoy desarrollando actualmente para un cliente, debo pedirle al usuario su nombre de usuario, contraseña y dominio de inicio de sesión de Windows y luego usarlos con System.Diagnostics.Process.Start para iniciar una aplicación.C#: pida al usuario una contraseña que luego se almacena en SecureString

Tengo un cuadro de texto con UseSystemPasswordChar para enmascarar la contraseña introducida.

Necesito un System.Security.SecureString para alimentar la contraseña para System.Diagnostics.Process.Start.

¿Cómo convierto el texto ingresado en cadena segura mientras no lo hago un carácter tras otro? Alternativamente: ¿hay un mejor control de ventana para pedir al usuario una contraseña que devuelva el texto ingresado como SecureString?

Respuesta

7

Intente mirar el control personalizado SecurePasswordTextBox. ¿Está intentando hacer algo similar a un comando de tipo "Ejecutar como" en el que está intentando ejecutar el proceso como un usuario diferente al que está actualmente conectado? De lo contrario, debería poder simplemente llamar a Process.Start y dejar que recoja las credenciales actuales de los usuarios.

También, echar un vistazo a los siguientes recursos, así:

La mejor opción probablemente sería utilizar un código de interoperabilidad p/inovke llamar CredUIPromptForCredentials para mostrar el cuadro de diálogo estándar de Windows y luego usar esa información para llamar a cualquiera Process.Start, o, más probablemente, llame a la función CreateProcessAsUser.

+0

Eso es exactamente lo que quiere el cliente: un programa minimalista que le permite al usuario iniciar aplicaciones en su contexto de usuario sin cerrar sesión en el usuario actualmente conectado. – BlaM

+0

¿no pueden simplemente cambiar, haga clic con el botón derecho en la aplicación y seleccione "ejecutar como ..."? – John

+0

@John: Lo mejor que puedo decir es que "Ejecutar como ..." ya no existe en Vista. Solo tiene una opción "Ejecutar como administrador". –

3

La razón por la que SecureString quiere aceptar un carácter a la vez es que de lo contrario tendrías toda la cadena antes de eso y harías que la cadena esté en la memoria. Por lo tanto, el uso de SecureString en este escenario es una especie de fracaso.

Cuestiones relacionadas