簡體   English   中英

當由一組信用卡下的計划任務啟動的進程在不同的一組Cred下運行另一個程序時,Windows是否有限制

[英]does windows have a limitation when a process started by a scheduled task under one set of creds runs another program under a different set of Creds

所以我有一個簡單的例子,我有app A,它有一些硬編碼信用給用戶X,一個本地管理員,然后它用這些憑證使用硬編碼的絕對路徑啟動應用B. A和B以及dotnet控制台應用程序,但它們不與控制台交互,只是將信息寫入文件。

當我以交互方式運行A(在我的Creds下,通過雙擊,或通過CMD.exe,或交互式PowerShell會話,它運行正常。成功調用B

當我通過一個計划任務運行它,其中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,我想知道這是否已知/記錄,以及是否有任何變通方法。

好的,這篇文章很老了,但是我正在運行同一個問題(powershell啟動過程失敗,退出代碼-1073741502,當通過服務運行時)。
顯然這與此問題有關( 為什么這個過程一啟動就會崩潰?

當指定憑據時,Process.Start在內部調用CreateProcessWithLogonW(CPLW)。 無法從Windows服務環境(例如IIS WCF服務)調用CreateProcessWithLogonW。 它只能從Interactive Process(由通過CTRL-ALT-DELETE登錄的用戶啟動的應用程序)調用。

我猜這是在運行計划任務時類似的東西,它在Windows服務環境中運行。
可能會阻止從服務運行您正在誘導的API本機調用。

我在Windows Server 2008R2下遇到了這樣的行為。 我的C#應用​​程序(A)啟動進程B.

進程B無法在不訪問Windows桌面的情況下運行,[無法調用Windows API CreateWindow(); 在作為服務運行時(或由調度程序)運行時阻止運行(這是為了防止使用“at / interactive cmd.exe”進行眾所周知的用戶權限提升)

我建議檢查您正在使用的環境,並檢查是否是同一個問題。 如果是這樣,那么您應該搜索如何刪除對CreateWindow()API調用的引用或正確處理它。

不幸的是,我無法訪問流程B,因此無法解決此問題。 我最終在Server 2003機器上部署了該解決方案。

因此,您有一個從預定任務(非交互式)運行的進程A,並將進程B作為X(本地管理員)啟動澄清:

  • 你是那個盒子的管理員嗎?
  • B需要窗口把手還是控制台把手?

您可以嘗試使用ProcessMonitor來查看哪個調用完全失敗。 我的猜測是B正在嘗試與桌面交互,並且被拒絕了這樣做的許可。

當您以用戶A身份登錄時,如果使用調度程序啟動交互式進程,則窗口會正常顯示。 但是如果您以用戶B(比如來賓用戶)的身份登錄並啟動一個以A(比如本地管理員)身份運行的交互式進程,那么系統確實在顯示UI時應該做些什么

總而言之,如果您有一個使用未登錄用戶憑據的交互式流程,那么沒有明確的贏家可以做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM