当由一组信用卡下的计划任务启动的进程在不同的一组Cred下运行另一个程序时,Windows是否有限制

klu*_*msy 13 c# powershell scheduled-tasks

所以我有一个简单的例子,我有app A,它有一些硬编码信用给用户X,一个本地管理员,然后它用这些凭证使用硬编码的绝对路径启动应用B. A和B以及dotnet控制台应用程序,但它们不与控制台交互,只是将信息写入文件.

当我进行交互(下我Creds,通过双击,或通过的CMD.exe,或交互式PowerShell会话它运行良好.成功呼叫乙

当我通过一个计划任务运行它,其中A由于信用卡,并且用用户X调用B时,Process.Start(mystartinfo)的错误代码是-1073741502或十六进制的0xC0000142,这意味着"应用程序无法正确初始化"

但是,如果我运行使用用户X凭据调用A的计划任务,它可以工作..

我做了这个小测试主要是因为我在PowerShell中从计划任务或远程处理中执行"start-job -Credential",或者在PowerShell中调用start-process或者在PowerShell中调用System.Diagnostic> Process.Start时看到类似的行为在相同的情况下.起初我认为这是PowerShell中的一个错误,但它似乎更深.无论是Windows还是特别是Dotnet,我想知道这是否已知/记录,以及是否有任何变通方法.

Tom*_*r W 1

我在Windows Server 2008R2下遇到了这样的行为。我的 C# 应用程序 (A) 启动进程 B。

进程 B 在无法访问 Windows 桌面的情况下无法运行,[无法调用 Windows API CreateWindow();] 当作为服务(或通过调度程序)运行时被阻止运行(这是为了防止使用“at /interactive cmd.exe”进行众所周知的用户权限升级)

建议您检查一下您使用的环境,看看是否存在同样的问题。如果是这样,那么您应该搜索如何删除对 CreateWindow() API 调用的引用或正确处理它。

不幸的是,我无法访问进程B,因此没有成功解决这个问题。我最终在 Server 2003 计算机上部署了该解决方案。