在 C# 应用程序中同时执行多个任务,每个任务都在一个单独的 Windows 用户帐户下

Posted

技术标签:

【中文标题】在 C# 应用程序中同时执行多个任务,每个任务都在一个单独的 Windows 用户帐户下【英文标题】:Executing multiple tasks simultaneously in a C# app, each under a separate Windows user account 【发布时间】:2012-07-30 21:25:53 【问题描述】:

我正在尝试构建一个旨在执行多项任务的 C# 应用程序 [e.g.同时打开文件、打开端口、生成 Windows 服务等。

这是我需要的:-

a) 应用程序应该能够同时运行这些任务[每个任务都通过一个单独的线程并在一个单独的线程内但在同一个应用程序域内启动] b) 每个线程应在单独的 Windows 用户帐户的帐户下运行 [用户名和密码将在应用程序启动之前通过存储库/表提供]

请建议在 C# 中实现这一目标的最佳方法? 谢谢, 苏米特

【问题讨论】:

【参考方案1】:

这是我的研究成果:- a) DllImport LogonUser、SetThreadToken 和 LogOffUser API b)登录用户并获取句柄/令牌 c) 创建线程并使用 SetThreadToken 在线程上设置令牌 d) 运行/执行线程。现在,线程将执行操作,就好像在使用 LogonUser API 提供凭据的用户帐户下运行一样 e) 线程完成工作后,调用 LogoffUser API 将用户从线程中注销。

这确实对我有用!

但是,我很想知道我是否可以使用托管/纯 C# API 来做到这一点。

有人吗?

【讨论】:

【参考方案2】:

不确定您是否可以在不同的用户凭据下运行不同的任务/线程,尽管您可以调用,这与使用不同的用户凭据运行不同的线程不同。

Process.Start(filenameToStart, username, password, domain);

对于并行处理可以使用Parallel.Invoke

Parallel.Invoke( () => doX(), () => doY());

【讨论】:

感谢您回答 Mayank。但我自己做了一些研究,发现一个本机 API SetThreadToken 可用于模拟任何用户并在他/她的凭据下运行线程

以上是关于在 C# 应用程序中同时执行多个任务,每个任务都在一个单独的 Windows 用户帐户下的主要内容,如果未能解决你的问题,请参考以下文章

多任务原理

py进程

多线程

C# 计划任务系列

多进程概念

Python 进程和线程