0

我有一个从主应用程序生成的子进程,需要在 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

4

4 回答 4

1

你用什么来冒充? LogonUser()应该允许空白密码。

我不认为调用psswd.AppendChar('\0')是指定空白密码的正确方法。尝试SecureString从您的代码中删除 ,看看您是否至少可以使模拟工作。然后重新添加 SecureString 以查看您的问题是否存在。

* 编辑 *

试试这个:

unsafe {
    char* ary = stackalloc char[0];
    SecureString str = new SecureString(ary, 0);
}

设置info.Password为您的新 SecureString ...不确定您是否必须在unsafe上下文中执行此操作。

于 2010-08-30T21:34:51.633 回答
1

为此,您必须禁用安全策略

  1. 转到控制面板 → 管理工具 → 本地安全策略。
  2. 浏览安全设置 → 本地策略 → 安全选项... 查找“帐户:将本地帐户使用空白密码限制为仅控制台登录”。
  3. 选择禁用并应用

这里还有其他解决方案: https ://sites.google.com/site/sqlestream/windows-issue/10-cannot-access-the-shared-folder-due-to-blank-password-not-allowed

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();
}

然后您将能够在不声明用户密码的情况下执行进程

于 2020-08-16T00:53:53.937 回答
0

正如这个问题所指出的,LoadUserProfileStartInfo. 试试看,它可能会有所帮助。

于 2010-08-30T21:35:58.717 回答
0

这显然是一个已知问题,LogonUser()由于密码为空而失败。我在我的用例中为所需的用户帐户设置了一个通用密码。

于 2012-10-16T18:02:44.480 回答