我有一個必須通過管道進行通信的進程。它在Windows 10的Windows XP SP3兼容模式下正常工作,但在其他模式下無法正常工作。使用subprocess.Popen(),以便子進程在Windows上以兼容模式啓動
但是,即使使用shell = True,子流程似乎也不在乎兼容模式。我想如果shell啓動它,而不是直接進入內核,請求CM將被保留,但它不會。從cmd.exe啓動時,它按預期在XP兼容模式下運行。
如何強制子進程以兼容模式啓動它?還是使用shell = True加上一些特殊的環境變量的問題?
該進程是Cygwin的ssh.exe,它具有在Windows 10上打開的密鑰權限的大問題。在XP中使用它CM會誘使它忽略ACL,否則該ACL會進入posix版本的權限模式。事情是,我不能指望用戶爲他們通過屬性添加的每個密鑰設置正確的權限,並且在程序中自動執行它是很複雜的,因爲程序可能沒有權限這樣做。這是一個大混亂。任何想法都表示讚賞。
一個解決方案是使用Microsoft應用程序兼容性工具包來創建一個明確的兼容性修補程序(一個定義.sdb文件),然後安裝修訂旁邊程序。這可能比使用註冊表項更靈活一些。 –
...你使用的是32位版本的Python嗎?可能需要明確選擇「cmd.exe」的64位版本,即「c:\ windows \ sysnative \ cmd.exe/c myapp.exe」,並查看是否有任何區別。 –