ProcessStartInfo.Password không phải là chuỗi đơn giản mà bạn có thể viết ra và gán cho thuộc tính. Những gì bạn cần là một cá thể SecureString và một SecureString không thể được tạo thông qua một chuỗi đơn giản đến hàm tạo của nó. Rõ ràng hệ điều hành không có API hoặc phương thức cho phép một chương trình không đáng tin cậy truy xuất mật khẩu của người dùng hiện tại (nó sẽ là lỗi bảo mật lớn nhất từng được nghe đến).
Vì vậy, trong suy nghĩ của tôi, bạn chỉ còn một tùy chọn. Yêu cầu người dùng phải gõ lại mật khẩu và nhập kết quả nên được chuyển thành một SecureString
Ví dụ này là một phương pháp mở rộng cho lớp chuỗi 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;
}
}
}
bạn có thể sử dụng nó để chuyển đổi các mật khẩu đã gõ bởi người dùng của bạn và bắt đầu quá trình
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);
}
}
Mật khẩu tài sản của ProcessStartInfo là một SecureString. Bạn không thể đơn giản viết nó theo cách đó – Steve
Bạn có thể lưu trữ nó trong một tệp/cơ sở dữ liệu sẽ được đọc khi chương trình được bắt đầu. Bạn cũng có thể mã hóa nó bằng cách dựa vào một phương pháp đơn giản cho tệp (http://stackoverflow.com/questions/740812/whats-the-easiest-way-to-encrypt-a-file-in-c) hoặc bằng cách dựa vào trên một chức năng trong xây dựng của DB (http://dev.mysql.com/doc/refman/5.0/es/set-password.html). – varocarbas