我有一个从我的主应用程序生成的子进程,需要在Windows 7计算机上作为另一个本地用户运行。我宁愿不在该用户帐户上设置密码,但似乎创建一个具有模拟的新进程不允许空密码或任何类型的空值。有人知道这是否可行?
下面是我尝试传递一个空白字符:ProcessStartInfo info = new ProcessStartInfo(@"C:\PathToExecutable");
System.Security.SecureString psswd = new System.Security.SecureString();
psswd.AppendChar('\0');
psswd.MakeReadOnly();
info.UseShellExecute = false;
info.UserName = "NewProcessName";
info.Password = psswd;
info.Domain = "LocalMachine";
Process newProc = new Process();
newProc.StartInfo = info;
newProc.Start();
编辑: 我收到的错误消息
Logon failure: user account restriction. Possible reasons are blank passwords not allowed, logon hour restrictions, or a policy restriction has been enforced
答案 0 :(得分:1)
你在冒什么? LogonUser()
应该允许空白密码。
我认为调用psswd.AppendChar('\0')
是指定空白密码的正确方法。尝试从代码中删除SecureString
,看看您是否至少可以使模拟工作。然后重新添加SecureString以查看您的问题是否存在。
*编辑*
试试这个:
unsafe {
char* ary = stackalloc char[0];
SecureString str = new SecureString(ary, 0);
}
将info.Password
设置为您的新SecureString ...不确定您是否必须在unsafe
上下文中执行此操作。
答案 1 :(得分:0)
在this问题指出时,请在LoadUserProfile
中将StartInfo
设置为true。尝试一下,它可能有所帮助。
答案 2 :(得分:0)
这显然是一个已知问题,LogonUser()
失败,密码为空。我在用例中为所需的用户帐户设置了通用密码。
答案 3 :(得分:0)
为此,您必须禁用安全策略
ProcessStartInfo procStartInfo = new ProcessStartInfo("File Name", "Argument(Optional)")
{
UserName = "UserName",
RedirectStandardError = true,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
using (Process proc = new Process())
{
proc.StartInfo = procStartInfo;
proc.Start();
}
然后您就可以执行一个过程而无需声明用户密码