ProcessStartInfo.Password - это не простая строка, которую вы можете записать и присвоить свойству. Вам нужен экземпляр SecureString, и SecureString не может быть создан, передавая простую строку его конструктору. Очевидно, что ОС не имеет API или метода, который позволяет ненадежной программе получать пароль текущего пользователя (это была бы самая большая ошибка безопасности, когда-либо слышавшаяся).
Итак, по моему мнению, у вас остается только один вариант. Попросите пользователя снова ввести пароль и полученный вход должен быть преобразован в SecureString
Этот пример является метод расширения для класса строки, которые 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;
}
}
}
вы можете использовать его для преобразования пароля набранного вашим пользователем и начать процесс
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);
}
}
Password свойство ProcessStartInfo является SecureString. Вы не можете просто написать его таким образом. – Steve
Вы можете сохранить его в файле/базе данных, который будет читаться при запуске программы. Вы также можете зашифровать его, опираясь на простую методологию для файла (http://stackoverflow.com/questions/740812/whats-the-easiest-way-to-encrypt-a-file-in-c) или полагаясь по встроенной функции БД (http://dev.mysql.com/doc/refman/5.0/es/set-password.html). – varocarbas