【发布时间】:2015-02-08 14:16:18
【问题描述】:
我的一个 C# 应用程序有一个非常奇怪的问题:
它的一般用途是根据[user32.dll] SendMessage 发送命令。这在普通机器上或从批处理文件或命令行窗口启动时不会出现问题。
如果我从 Telnet、SSH 或 PHP 的 shell_exec() 执行我的应用程序,即使它可以找到目标进程,应用程序也找不到目标窗口句柄。
我写了一段测试代码来告诉你我的问题:
public static int Main(string[] argv)
{
foreach (Process p in Process.GetProcesses())
Console.Write(p.MainWindowHandle.ToInt32().ToString("x8") + " - " + p.ProcessName + "\n");
Console.ReadKey(true);
return 0;
}
以“正常”方式执行时的结果如下:
00000000 - BTTray
00000000 - SkypeC2CAutoUpdateSvc
00000000 - svchost
00000000 - DLMSession
00000000 - conhost
00000000 - chrome
00000000 - GoogleCrashHandler64
000b0a58 - devenv
00000000 - FreeSSHDService
00000000 - GoogleCrashHandler
00000000 - mDNSResponder
00000000 - conhost
00000000 - AcSvc
00000000 - taskeng
00000000 - lsm
00000000 - chrome
00000000 - UMVPFSrv
00000000 - lsass
00000000 - IntelliTrace
00000000 - PresentationFontCache
00000000 - conhost
00000000 - smss
00000000 - AppleMobileDeviceService
00000000 - services
00000000 - audiodg
00000000 - RCIMGDIR
00000000 - password_manager
00000000 - chrome
00000000 - tvt_reg_monitor_svc
00000000 - netsession_win
00030abe - devenv
00000000 - chrome
00000000 - WmiPrvSE
00000000 - PrintIsolationHost
00000000 - IpOverUsbSvc
00000000 - msvsmon
00000000 - WLIDSVC
00000000 - UNS
0003008a - tpnumlkd
00000000 - chrome
00000000 - mitsijm
00000000 - cmd
00000000 - svchost
00000000 - httpd
00000000 - QDLService2kLenovo
00000000 - spoolsv
00000000 - winlogon
00000000 - TCPSVCS
00000000 - WUDFHost
00000000 - SynTPHelper
00000000 - vmnat
00000000 - conhost
00000000 - chrome
00000000 - NisSrv
00000000 - svchost
00000000 - netsession_win
00000000 - mysqld
00000000 - RegSrvc
00000000 - vmnetdhcp
00000000 - chrome
00000000 - cmd
00000000 - SynTPLpr
00000000 - iPodService
00000000 - rundll32
00000000 - msseces
00000000 - csrss
00000000 - svchost
00000000 - TrustedInstaller
00000000 - nvvsvc
000101aa - SynTPEnh
00000000 - wininit
00000000 - nvxdsync
00000000 - btwdins
00000000 - MFUSNM~1
00000000 - chrome
00000000 - EvtEng
00000000 - dgnsvc
00000000 - taskeng
00000000 - vmware-tray
00000000 - svchost
00000000 - PrivacyIconClient
00000000 - MSBuild
00000000 - AcDeskBandHlpr
00000000 - TpScrex
00200738 - notepad++
00000000 - PnkBstrA
00000000 - chrome
00000000 - cssauth
00000000 - chrome
00000000 - SUService
00000000 - svchost
00000000 - chrome
00000000 - AdAppMgrSvc
00000000 - chrome
00000000 - LMS
00000000 - WmiPrvSE
00000000 - IntelliTrace
00000000 - svchost
00000000 - csrss
00000000 - DTLite
00000000 - TPONSCR
00000000 - iTunesHelper
00000000 - agent
00000000 - chrome
00000000 - sqlwriter
00000000 - DZSVC64
00000000 - conhost
00000000 - rundll32
00000000 - sshd
00000000 - acrotray
00000000 - chrome
00000000 - SvcGuiHlpr
00000000 - telnet
00000000 - tpnumlk
00000000 - loggerservice
00000000 - wlanext
00000000 - svchost
00000000 - explorer
00000000 - TpShocks
00000000 - micmute
00000000 - mounter
00000000 - AcPrfMgrSvc
00000000 - TPOSDSVC
00000000 - BlackGlassEnhanced
00000000 - svchost
002e03f6 - chrome
00000000 - TPHKSVC
00000000 - SpotifyWebHelper
00000000 - unsecapp
00000000 - ibmpmsvc
00000000 - cammute
000303d8 - clover
00000000 - nvvsvc
00000000 - svchost
00000000 - ISUSPM
00000000 - password_manager
00000000 - wodCmdTerm
00000000 - TeamViewer_Service
00000000 - FLxHCIm
00000000 - vmware-usbarbitrator64
00000000 - rundll32
00160f3c - wmplayer
00000000 - conhost
0002001c - explorer
00000000 - dwm
00000000 - CISVC
00000000 - svchost
00000000 - svchost
00091068 - cmd
00000000 - test implementation.vshost
00000000 - svchost
00000000 - chrome
00000000 - taskhost
00000000 - svchost
00000000 - armsvc
00000000 - OSPPSVC
00000000 - conhost
00000000 - MCPLaunch
00000000 - svchost
00030ff6 - WMP
00000000 - vmware-authd
00000000 - conhost
00000000 - conhost
00000000 - WUDFHost
00000000 - chrome
00000000 - SkypeC2CPNRSvc
00000000 - iviRegMgr
00000000 - vmware-hostd
00000000 - chrome
00000000 - wuauclt
00000000 - httpd
00000000 - taskhost
00000000 - cygrunsrv
00000000 - UnsignedThemesSvc
00000000 - MsMpEng
00000000 - WLIDSVCM
00000000 - System
00000000 - DLG
00000000 - SearchIndexer
00000000 - Idle
如您所见 - 有许多进程没有窗口句柄,但像 VisualStudio (devnev) 这样的进程有一个。
如果我通过 Telnet、SSH 等运行相同的命令,我会得到以下结果:
00000000 - BTTray
00000000 - SkypeC2CAutoUpdateSvc
00000000 - svchost
00000000 - DLMSession
00000000 - conhost
00000000 - chrome
00000000 - GoogleCrashHandler64
00000000 - devenv
00000000 - FreeSSHDService
00000000 - GoogleCrashHandler
00000000 - mDNSResponder
00000000 - conhost
00000000 - AcSvc
00000000 - taskeng
00000000 - lsm
00000000 - chrome
00000000 - UMVPFSrv
00000000 - lsass
00000000 - IntelliTrace
00000000 - PresentationFontCache
00000000 - conhost
00000000 - smss
00000000 - AppleMobileDeviceService
00000000 - services
00000000 - audiodg
00000000 - RCIMGDIR
00000000 - password_manager
00000000 - chrome
00000000 - tvt_reg_monitor_svc
00000000 - netsession_win
00000000 - devenv
00000000 - chrome
00000000 - WmiPrvSE
00000000 - PrintIsolationHost
00000000 - IpOverUsbSvc
00000000 - msvsmon
00000000 - WLIDSVC
00000000 - UNS
00000000 - tpnumlkd
00000000 - chrome
00000000 - mitsijm
00000000 - cmd
00000000 - svchost
00000000 - httpd
00000000 - QDLService2kLenovo
00000000 - spoolsv
00000000 - winlogon
00000000 - TCPSVCS
00000000 - WUDFHost
00000000 - SynTPHelper
00000000 - vmnat
00000000 - conhost
00000000 - chrome
00000000 - NisSrv
00000000 - svchost
00000000 - netsession_win
00000000 - mysqld
00000000 - RegSrvc
00000000 - vmnetdhcp
00000000 - chrome
00020062 - cmd
00000000 - SynTPLpr
00000000 - iPodService
00000000 - rundll32
00000000 - msseces
00000000 - csrss
00000000 - svchost
00000000 - TrustedInstaller
00000000 - nvvsvc
00000000 - SynTPEnh
00000000 - wininit
00000000 - nvxdsync
00000000 - btwdins
00000000 - MFUSNM~1
00000000 - chrome
00000000 - EvtEng
00000000 - dgnsvc
00000000 - taskeng
00000000 - vmware-tray
00000000 - svchost
00000000 - PrivacyIconClient
00000000 - MSBuild
00000000 - AcDeskBandHlpr
00000000 - TpScrex
00000000 - notepad++
00000000 - PnkBstrA
00000000 - chrome
00000000 - cssauth
00000000 - chrome
00000000 - SUService
00000000 - svchost
00000000 - chrome
00000000 - AdAppMgrSvc
00000000 - chrome
00000000 - LMS
00000000 - WmiPrvSE
00000000 - IntelliTrace
00000000 - svchost
00000000 - csrss
00000000 - DTLite
00000000 - TPONSCR
00000000 - iTunesHelper
00000000 - agent
00000000 - chrome
00000000 - sqlwriter
00000000 - DZSVC64
00000000 - conhost
00000000 - rundll32
00000000 - sshd
00000000 - acrotray
00000000 - chrome
00000000 - SvcGuiHlpr
00000000 - telnet
00000000 - tpnumlk
00000000 - loggerservice
00000000 - wlanext
00000000 - svchost
00000000 - explorer
00000000 - TpShocks
00000000 - micmute
00000000 - mounter
00000000 - AcPrfMgrSvc
00000000 - TPOSDSVC
00000000 - BlackGlassEnhanced
00000000 - svchost
00000000 - chrome
00000000 - TPHKSVC
00000000 - SpotifyWebHelper
00000000 - unsecapp
00000000 - ibmpmsvc
00000000 - cammute
00000000 - clover
00000000 - nvvsvc
00000000 - svchost
00000000 - ISUSPM
00000000 - password_manager
00000000 - wodCmdTerm
00000000 - TeamViewer_Service
00000000 - FLxHCIm
00000000 - vmware-usbarbitrator64
00000000 - rundll32
00000000 - wmplayer
00000000 - conhost
00000000 - explorer
00000000 - dwm
00000000 - CISVC
00000000 - svchost
00000000 - svchost
00000000 - cmd
00000000 - test implementation.vshost
00000000 - svchost
00000000 - chrome
00000000 - taskhost
00000000 - svchost
00000000 - armsvc
00000000 - OSPPSVC
00000000 - conhost
00000000 - MCPLaunch
00000000 - svchost
00000000 - WMP
00000000 - vmware-authd
00000000 - conhost
00000000 - conhost
00000000 - WUDFHost
00000000 - chrome
00000000 - SkypeC2CPNRSvc
00000000 - iviRegMgr
00000000 - vmware-hostd
00000000 - chrome
00000000 - wuauclt
00000000 - httpd
00000000 - taskhost
00000000 - cygrunsrv
00000000 - UnsignedThemesSvc
00000000 - MsMpEng
00000000 - WLIDSVCM
00000000 - System
00000000 - DLG
00000000 - SearchIndexer
00000000 - Idle
如您所见,每个进程(cmd 除外)都没有窗口句柄。
我的问题是:我该如何解决这个问题?还是 Windows 以某种方式阻止通过 Telnet 访问窗口?
非常感谢
【问题讨论】:
标签: c# process window telnet handle