c# - 如果使用不同的用户凭据,为什么 Process.Start 会抛出 Win32Exception?

标签 c# process

我需要以另一个用户的身份启动一个进程,它正在爆炸。

我将我的代码缩减为一个简单的引用示例。此代码可以很好地启动进程本身:

        var info = new ProcessStartInfo("notepad.exe")
                       {
                           UseShellExecute = false,
                           RedirectStandardInput = true,
                           RedirectStandardError = true,
                           RedirectStandardOutput = true
                       };

但是,如果我添加 UserNamePassword 值:

       var info = new ProcessStartInfo("notepad.exe")
                       {
                           UserName = "user",
                           Password = StringToSecureString("password"),
                           UseShellExecute = false,
                           RedirectStandardInput = true,
                           RedirectStandardError = true,
                           RedirectStandardOutput = true
                       };
        Process.Start(info);

它用非常有用的 System.ComponentModel.Win32Exception 消息轰炸:

The service cannot be started, either because it is disabled or because it has no enabled devices associated with it.

以防万一,下面是安全的字符串转换方法:

    private static SecureString StringToSecureString(string s)
    {
        var secure = new SecureString();
        foreach (var c in s.ToCharArray())
        {
            secure.AppendChar(c);
        }
        return secure;
    }

任何想法或替代解决方案将不胜感激!

最佳答案

您的 Secondary Logon 服务是否已启动,我相信这是在不同用户帐户下启动新进程所必需的?

关于c# - 如果使用不同的用户凭据,为什么 Process.Start 会抛出 Win32Exception?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4135118/

相关文章:

python multiprocessing.Pool kill *特定*长时间运行或挂起的进程

c# - Object.GetType 也可以用于后期绑定(bind)吗?

c# - win 8 metro app c# 多项目模板

c# - 隐藏不可聚焦的 WPF 文本框的右键菜单

java - 从 WCF 服务执行 JAR

javascript - 在 Node.js 中写入 process.stdin 并解析该行的最佳方法?

c# - 缺少 OpenNetCF WebRequestMethod 类

c# - 通过脚本将多种 Material 分配给游戏对象?

c++ - 在 Qt/C++ 中获取 QProcess 的可执行文件名称

process - LibGDX - 如何维护后台进程