Il ProcessStartInfo.Password non è una stringa semplice che è possibile annotare e assegnare alla proprietà. Quello di cui hai bisogno è un'istanza SecureString e non è possibile creare una SecureString passando una semplice stringa al suo costruttore. Ovviamente il sistema operativo non ha API o metodo che consente a un programma non affidabile di recuperare la password dell'utente corrente (sarebbe il più grande bug di sicurezza mai sentito).
Quindi, nel mio modo di pensare, si rimane con una sola opzione. Chiedi al tuo all'utente di digitare nuovamente la password e l'ingresso risultante dovrebbe essere trasformato in un SecureString
Questo esempio è un metodo di estensione per la classe stringa che I have seen here
using System.Security;
// ...
public static SecureString ConvertToSecureString(this string password)
{
if (password == null)
throw new ArgumentNullException("password");
unsafe
{
fixed (char* passwordChars = password)
{
var securePassword = new SecureString(passwordChars, password.Length);
securePassword.MakeReadOnly();
return securePassword;
}
}
}
si potrebbe utilizzare per trasformare la password digitata dal tuo utente e avvia il processo
using(frmGetPassword fgp = new frmGetPassword())
{
if(DialogResult.OK == fgp.ShowDialog())
{
SecureString ss = fgp.Password.ConvertToSecureString();
var processInfo = new ProcessStartInfo
{
WorkingDirectory = workingDirectory,
FileName = "a name",
UserName = loggedUserName,
Password = ss,
Domain = userNameDomain,
UseShellExecute = false,
};
Process.Start(processInfo);
}
}
proprietà Password di ProcessStartInfo è un SecureString. Non puoi semplicemente scriverlo in questo modo – Steve
Puoi archiviarlo in un file/database che verrà letto all'avvio del programma. Puoi anche crittografarlo facendo affidamento su una semplice metodologia per il file (http://stackoverflow.com/questions/740812/whats-the-easiest-way-to-encrypt-a-file-in-c) o facendo affidamento su una funzione integrata del DB (http://dev.mysql.com/doc/refman/5.0/es/set-password.html). – varocarbas