ProcessStartInfo.Passwordは、書き留めてプロパティに割り当てることができる単純な文字列ではありません。必要なのはSecureStringインスタンスです。SecureStringを作成して単純な文字列をコンストラクタに渡すことはできません。明らかに、OSには、信頼できないプログラムが現在のユーザーのパスワードを取得することを可能にするAPIやメソッドはありません(これまでに聞いたことがない最大のセキュリティバグでしょう)。
私の考えでは、1つのオプションしか残っていません。もう一度パスワードを入力するようユーザーに依頼し、その結果の入力はこの例では、入力したパスワードを変換するためにそれを使用することができます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;
}
}
}
という文字列クラスの拡張メソッドであるSecureString
に変換する必要がありますあなたのユーザーが処理を開始します。
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プロパティがSecureStringです。そのように書くことは簡単ではありません – Steve
プログラムを開始するときに読み込まれるファイル/データベースに格納することができます。また、ファイルの簡単な方法論(http://stackoverflow.com/questions/740812/whats-the-easiest-way-to-encrypt-a-file-in-c)に頼るか、 DBの組み込み関数(http://dev.mysql.com/doc/refman/5.0/es/set-password.html)にあります。 – varocarbas