PowerShell在NavigateComplete2事件触发时崩溃

本文关键字:崩溃 事件 NavigateComplete2 PowerShell | 更新日期: 2023-09-27 18:06:54

我一直在尝试处理来自SHDocVw的IE事件。Internet Explorer。为此,我在Visual Studio项目中添加了对C:'windows'system32'ShDocVw.dll的引用,该引用在编译时自动生成Interop.ShDocVw.dll

我无法初始化SHDocVw。在PowerShell中直接使用InternetExplorer,这里有关于我的问题的更多信息

PowerShell版本信息

PS C:'Users'chentiangemalc> $PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.14393.103
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14393.103
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

我正在使用的当前代码

[System.Reflection.Assembly]::LoadFrom("C:'support'IeAutomator'Interop.SHDocVw.dll")
$code = @'
using System;
using System.Collections.Generic;
using System.Text;
public static class IE
{
    public static SHDocVw.InternetExplorer GetIE()
    {
        var target = new SHDocVw.InternetExplorer();
        return target;
    }
}
'@
Add-Type -TypeDefinition $code -ReferencedAssemblies "C:'support'IeAutomator'Interop.SHDocVw.dll"
$ie = [IE]::GetIE()
$navigateComplete2 = Register-ObjectEvent -InputObject $ie -EventName "NavigateComplete2" -SourceIdentifier "IE.NavigateComplete2"
$ie.Visible = $true
$ie.Navigate("http://www.google.com.au")
Wait-Event -SourceIdentifier "IE.NavigateComplete2"

崩溃似乎发生在google.com.au加载后,所以当我期望NavigateComplete2事件将被触发。

我也试过

$ie.add_NavigateComplete2({ Write-Host "NavigateComplete2!" })

但这根本没有触发。在WinDbg下运行:

1:006> !analyze -v
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************
*** WARNING: Unable to verify checksum for C:'Windows'assembly'NativeImages_v4.0.30319_64'Microsoft.Pb378ec07#'82473b57141194bcb8c2b3e31479e32d'Microsoft.PowerShell.ConsoleHost.ni.dll
*** WARNING: Unable to verify checksum for C:'Windows'assembly'NativeImages_v4.0.30319_64'Microsoft.P521220ea#'179a8ea61a118e0c51c9acc481b8fb86'Microsoft.PowerShell.Commands.Utility.ni.dll
Failed to switch to target 0
GetUrlPageData2 (WinHttp) failed: 12002.
DUMP_CLASS: 2
DUMP_QUALIFIER: 0
FAULTING_IP: 
clr!JIT_IsInstanceOfClass2+1e
00007ff8`5bea3bae 488b5210        mov     rdx,qword ptr [rdx+10h]
EXCEPTION_RECORD:  (.exr -1)
ExceptionAddress: 00007ff85bea3bae (clr!JIT_IsInstanceOfClass2+0x000000000000001e)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 0000000000000000
   Parameter[1]: ffffffffffffffff
Attempt to read from address ffffffffffffffff
FAULTING_THREAD:  00003f50
DEFAULT_BUCKET_ID:  INVALID_POINTER_READ
PROCESS_NAME:  powershell.exe
ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.
EXCEPTION_CODE_STR:  c0000005
EXCEPTION_PARAMETER1:  0000000000000000
EXCEPTION_PARAMETER2:  ffffffffffffffff
FOLLOWUP_IP: 
clr!JIT_IsInstanceOfClass2+1e
00007ff8`5bea3bae 488b5210        mov     rdx,qword ptr [rdx+10h]
READ_ADDRESS:  ffffffffffffffff 
BUGCHECK_STR:  INVALID_POINTER_READ
WATSON_BKT_PROCSTAMP:  57899aad
WATSON_BKT_PROCVER:  10.0.14393.0
PROCESS_VER_PRODUCT:  Microsoft® Windows® Operating System
WATSON_BKT_MODULE:  clr.dll
WATSON_BKT_MODSTAMP:  575a1507
WATSON_BKT_MODOFFSET:  3bae
WATSON_BKT_MODVER:  4.6.1586.0
MODULE_VER_PRODUCT:  Microsoft® .NET Framework
BUILD_VERSION_STRING:  10.0.14393.0 (rs1_release.160715-1616)
MODLIST_WITH_TSCHKSUM_HASH:  0dd991ed9eff5611cdfb10e932a26711163d1273
MODLIST_SHA1_HASH:  cdcd900a67a9c62dc8ee8eebfc73dc865306c7d9
NTGLOBALFLAG:  70
APPLICATION_VERIFIER_FLAGS:  0
PRODUCT_TYPE:  1
SUITE_MASK:  272
MISSING_CLR_SYMBOL: 0
ANALYSIS_SESSION_HOST:  DESKTOP-NC2T50T
ANALYSIS_SESSION_TIME:  09-13-2016 09:21:52.0518
ANALYSIS_VERSION: 10.0.14321.1024 amd64fre
MANAGED_CODE: 1
MANAGED_ENGINE_MODULE:  clr
MANAGED_ANALYSIS_PROVIDER:  SOS
MANAGED_THREAD_ID: 3f50
THREAD_ATTRIBUTES: 
OS_LOCALE:  ENA
PROBLEM_CLASSES: 

INVALID_POINTER_READ
    Tid    [0x3f50]
    Frame  [0x00]: clr!JIT_IsInstanceOfClass2

LAST_CONTROL_TRANSFER:  from 00007ff82fa2058e to 00007ff85bea3bae
STACK_TEXT:  
000000d2`42bfc148 00007ff8`2fa2058e : 00007ff8`5c5d48d8 00007ff8`5bfb47e6 0018029c`52a286b0 00007ff8`5bec4200 : clr!JIT_IsInstanceOfClass2+0x1e
000000d2`42bfc150 00007ff8`2e4b9b01 : 00007ff7`fcaf8040 000000d2`42bfc300 000000d2`42bfc4b8 000000d2`42bfc3e8 : System_Management_Automation_ni+0x1e2058e
000000d2`42bfc1b0 00007ff7`fc8cb2fd : 000000d2`42bfc410 000000d2`42bfc4b8 000000d2`42bfc3e8 000000d2`42bfc8b0 : System_Management_Automation_ni+0x8b9b01
000000d2`42bfc240 00007ff8`5bea6a53 : 0000029c`54baf7b0 0000029c`54c5aee0 0000029c`54c6abf0 00007ff8`5c5b8948 : 0x00007ff7`fc8cb2fd
000000d2`42bfc290 00007ff8`5bea6913 : 00007ff8`593816b8 00000000`00000000 0000029c`54c6abf0 80003ffb`fe57e1e0 : clr!CallDescrWorkerInternal+0x83
000000d2`42bfc2d0 00007ff8`5bfecace : 00000000`00000000 00000000`00000000 000000d2`42bfc4b8 00007ff8`58d05352 : clr!CallDescrWorkerWithHandler+0x4e
000000d2`42bfc310 00007ff8`5bfec977 : 00007ff8`58d05352 00007ff8`59381c98 00000000`00000000 00007ff7`fcaf8040 : clr!CallDescrWorkerReflectionWrapper+0x1a
000000d2`42bfc360 00007ff8`59235230 : 000000d2`02000000 000000d2`42bfcb48 00000000`00000000 0000029c`54c5c800 : clr!RuntimeMethodHandle::InvokeMethod+0x567
000000d2`42bfc940 00007ff8`59234d32 : 0000029c`54764d68 00000000`00000000 00000000`00000000 000000d2`00000000 : mscorlib_ni+0x535230
000000d2`42bfc9b0 00007ff8`5bea6a53 : 0000029c`54c110c0 0000029c`54bb0018 00007ff8`00040100 0000029c`54764d68 : mscorlib_ni+0x534d32
000000d2`42bfca30 00007ff8`5bea6913 : 000000d2`42bfd248 00007ff8`5c06b8ac 000000d2`42bfd248 00000000`00000000 : clr!CallDescrWorkerInternal+0x83
000000d2`42bfca80 00007ff8`5bea7165 : 00000000`00000006 000000d2`42bfd5b0 000000d2`42bfdaa0 000000d2`42bfd248 : clr!CallDescrWorkerWithHandler+0x4e
000000d2`42bfcac0 00007ff8`5bfa3674 : 000000d2`42bfdb30 00000000`00040100 000000d2`42bfdb30 00000000`00040100 : clr!MethodDescCallSite::CallTargetWorker+0xf8
000000d2`42bfcbd0 00007ff8`5bfa31d6 : 00007ff8`00000006 00000002`00000002 00002001`0000001d 000000d2`42bfd720 : clr!DispatchInfo::InvokeMemberWorker+0xad8
000000d2`42bfd780 00007ff8`5bfa3afd : 00000000`00000000 0000029c`6c89ab30 00000000`00000000 000000d2`42bfd9a0 : clr!DispatchInfo::InvokeMemberDebuggerWrapper+0x1c6
000000d2`42bfd8e0 00007ff8`5bfa3ec6 : 0000029c`6cad8420 00000000`00000000 0000029c`542efe20 0000029c`6cabed30 : clr!DispatchInfo::InvokeMember+0x467
000000d2`42bfdbd0 00007ff8`5bfa3d2d : 0000029c`542efe00 0000029c`6cadbe8c 000000d2`42bfdd80 00000000`000000fc : clr!InternalDispatchImpl_Invoke+0x1ed
000000d2`42bfdcf0 00007ff8`5bfa3c6e : 0000029c`6cac1fa0 0000029c`6cad9888 00007ff8`00000000 00007ff8`00000000 : clr!InternalDispatchImpl_Invoke_CallBack+0xb2
000000d2`42bfdd50 00007ff8`6c785664 : 00000000`00000000 0000029c`6cadbf54 0000029c`6c89ab30 00007ff8`6c796db2 : clr!InternalDispatchImpl_Invoke_Wrapper+0xf8
000000d2`42bfddf0 00007ff8`6c784840 : 000000d2`42bfe340 00007ff8`000000fc 000000d2`42bfe780 00000000`00000000 : OLEAUT32!IDispatch_Invoke_Stub+0xd4
000000d2`42bfde80 00007ff8`6d4349f0 : 000000d2`42bfe050 000000d2`42bfe340 00007ff8`6c799ea2 000000d2`42bfe780 : OLEAUT32!IDispatch_RemoteInvoke_Thunk+0x60
000000d2`42bfdef0 00007ff8`6d042260 : 00007ff8`6c796a10 0000029c`6cac4930 00000000`00000000 00007ff8`5c2b76e7 : RPCRT4!NdrStubCall2+0x990
000000d2`42bfe590 00007ff8`6c7747ce : 0000029c`00000001 000000d2`42bfe780 0000029c`6cac4908 0000029c`542efe00 : combase!CStdStubBuffer_Invoke+0xb0
000000d2`42bfe5d0 00007ff8`6d08de2c : 00000000`00000000 0000029c`542efe20 000000d2`42bfe780 00000000`00000000 : OLEAUT32!CDispStubWrapper::Invoke+0x11e
000000d2`42bfe620 00007ff8`6d08e472 : 0000029c`00000000 000000d2`42bfe790 000000d2`42bfe700 00007ff8`6d557ad7 : combase!ObjectMethodExceptionHandlingAction<<lambda_76d9e92c799d246a4afbe64a2bf5673d> >+0x4c
000000d2`42bfe680 00007ff8`6d0a5e18 : 0000029c`6cac1ad0 000000d2`42bfea20 0000029c`6cac48d0 0000029c`6ca45488 : combase!DefaultStubInvoke+0x222
000000d2`42bfe8a0 00007ff8`6d0a3e1d : 00000000`00000000 00000000`00000000 0000007f`00000904 0000029c`6cac1a00 : combase!ServerCall::ContextInvoke+0x448
000000d2`42bfeb80 00007ff8`6d0a2574 : 0000029c`6cac3d30 0000029c`6cac1720 0000029c`6cac1720 0000029c`fffffff4 : combase!AppInvoke+0x32d
000000d2`42bfecf0 00007ff8`6d0a17fc : 0000029c`6cac18f0 0000029c`6cac1720 0000029c`52a10000 0000029c`6cac1720 : combase!ComInvokeWithLockAndIPID+0x574
000000d2`42bfef60 00007ff8`6d44a194 : 0000029c`52a10000 00000000`00000000 00007ff8`6d2138f0 00000000`00000000 : combase!ThreadInvoke+0xe2c
000000d2`42bff1a0 00007ff8`6d4490ad : 00000000`00000000 00000000`00000000 000000d2`42bff3c0 00007ff8`6a88e2eb : RPCRT4!DispatchToStubInCNoAvrf+0x24
000000d2`42bff1f0 00007ff8`6d449bfe : 0000029c`6cac3c74 000000d2`42bff3c0 00000060`00000000 00000000`00000000 : RPCRT4!RPC_INTERFACE::DispatchToStubWorker+0x1bd
000000d2`42bff2c0 00007ff8`6d429927 : 0000029c`6cadbdc0 00000000`00000000 0000029c`6cac7db0 00000000`00000001 : RPCRT4!RPC_INTERFACE::DispatchToStubWithObject+0x15e
000000d2`42bff360 00007ff8`6d429f7c : 00000000`0660cbd5 0000029c`6cac3a70 000000d2`42bff509 0000029c`6cac3a70 : RPCRT4!LRPC_SCALL::DispatchRequest+0x177
000000d2`42bff440 00007ff8`6d44426c : 00000000`00000000 0000029c`6cac37a0 00000000`00000000 00000000`00000000 : RPCRT4!LRPC_SCALL::HandleRequest+0x2bc
000000d2`42bff560 00007ff8`6d445acb : 0000029c`6c88c9e0 0000029c`6c88c9e0 0000029c`00000001 0000029c`6c88c9e0 : RPCRT4!LRPC_ADDRESS::HandleRequest+0x36c
000000d2`42bff610 00007ff8`6d4385ca : 00000000`00000001 000000d2`42bffab8 00000000`00000000 00007ff8`6d4e0f74 : RPCRT4!LRPC_ADDRESS::ProcessIO+0x91b
000000d2`42bff750 00007ff8`6d5525fe : 00000000`00000000 00007ff8`00000001 00000000`7ffe03b0 00000000`00000000 : RPCRT4!LrpcIoComplete+0xaa
000000d2`42bff7f0 00007ff8`6d5530d9 : 00000000`00000004 0000029c`6c88dc00 0000029c`6c893910 00000000`00000000 : ntdll!TppAlpcpExecuteCallback+0x25e
000000d2`42bff8a0 00007ff8`6cd98364 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!TppWorkerThread+0x8d9
000000d2`42bffca0 00007ff8`6d585e91 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x14
000000d2`42bffcd0 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x21

THREAD_SHA1_HASH_MOD_FUNC:  6f313d77ee52b1c452e91a9959f8da5f7c030dc7
THREAD_SHA1_HASH_MOD_FUNC_OFFSET:  1362514c904581be6819c9ad457ddb0e0a348429
THREAD_SHA1_HASH_MOD:  ef2aa043b63e07053dcc0140b8bae8887bda87e9
FAULT_INSTR_CODE:  10528b48
SYMBOL_STACK_INDEX:  0
SYMBOL_NAME:  clr!JIT_IsInstanceOfClass2+1e
FOLLOWUP_NAME:  MachineOwner
MODULE_NAME: clr
IMAGE_NAME:  clr.dll
DEBUG_FLR_IMAGE_TIMESTAMP:  575a1507
STACK_COMMAND:  ~6s ; kb
BUCKET_ID:  INVALID_POINTER_READ_clr!JIT_IsInstanceOfClass2+1e
PRIMARY_PROBLEM_CLASS:  INVALID_POINTER_READ_clr!JIT_IsInstanceOfClass2+1e
FAILURE_EXCEPTION_CODE:  c0000005
FAILURE_IMAGE_NAME:  clr.dll
BUCKET_ID_IMAGE_STR:  clr.dll
FAILURE_MODULE_NAME:  clr
BUCKET_ID_MODULE_STR:  clr
FAILURE_FUNCTION_NAME:  JIT_IsInstanceOfClass2
BUCKET_ID_FUNCTION_STR:  JIT_IsInstanceOfClass2
BUCKET_ID_OFFSET:  1e
BUCKET_ID_MODPRIVATE: 1
BUCKET_ID_MODTIMEDATESTAMP:  575a1507
BUCKET_ID_MODCHECKSUM:  9e00c2
BUCKET_ID_MODVER_STR:  4.6.1586.0
BUCKET_ID_PREFIX_STR:  INVALID_POINTER_READ_
FAILURE_PROBLEM_CLASS:  INVALID_POINTER_READ
FAILURE_SYMBOL_NAME:  clr.dll!JIT_IsInstanceOfClass2
FAILURE_BUCKET_ID:  INVALID_POINTER_READ_c0000005_clr.dll!JIT_IsInstanceOfClass2
WATSON_STAGEONE_URL:  http://watson.microsoft.com/StageOne/powershell.exe/10.0.14393.0/57899aad/clr.dll/4.6.1586.0/575a1507/c0000005/00003bae.htm?Retriage=1
TARGET_TIME:  2016-09-12T23:23:17.000Z
OSBUILD:  14393
OSSERVICEPACK:  0
SERVICEPACK_NUMBER: 0
OS_REVISION: 0
OSPLATFORM_TYPE:  x64
OSNAME:  Windows 10
OSEDITION:  Windows 10 WinNt SingleUserTS
USER_LCID:  0
OSBUILD_TIMESTAMP:  2016-07-16 12:21:29
BUILDDATESTAMP_STR:  160715-1616
BUILDLAB_STR:  rs1_release
BUILDOSVER_STR:  10.0.14393.0
ANALYSIS_SESSION_ELAPSED_TIME: 19ceb
ANALYSIS_SOURCE:  UM
FAILURE_ID_HASH_STRING:  um:invalid_pointer_read_c0000005_clr.dll!jit_isinstanceofclass2
FAILURE_ID_HASH:  {8e51dedb-2c00-2e6e-4807-e20bf1dd21ab}
Followup:     MachineOwner
---------
1:006> !clrstack
OS Thread Id: 0x3f50 (6)
        Child SP               IP Call Site
000000d242bfc4b8 00007ff85bea3bae [DebuggerU2MCatchHandlerFrame: 000000d242bfc4b8] 
000000d242bfc7c8 00007ff85bea3bae [HelperMethodFrame_PROTECTOBJ: 000000d242bfc7c8] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean)
000000d242bfc940 00007ff859235230 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object, System.Object[], System.Object[])
000000d242bfc9b0 00007ff859234d32 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
000000d242bfdaa0 00007ff85bea6a53 [DebuggerU2MCatchHandlerFrame: 000000d242bfdaa0] 
000000d242bfdaf0 00007ff85bea6a53 [GCFrame: 000000d242bfdaf0] 
000000d242bfdab8 00007ff85bea6a53 [GCFrame: 000000d242bfdab8] 
1:006> .foreach (ex {!dumpheap -type Exception -short}){.echo "********************************";!pe ${ex} } 
********************************
Exception object: 0000029c54761048
Exception type:   System.Exception
Message:          <none>
InnerException:   <none>
StackTrace (generated):
<none>
StackTraceString: <none>
HResult: 80131500
********************************
Exception object: 0000029c547610e8
Exception type:   System.OutOfMemoryException
Message:          <none>
InnerException:   <none>
StackTrace (generated):
<none>
StackTraceString: <none>
HResult: 8007000e
********************************
Exception object: 0000029c54761188
Exception type:   System.StackOverflowException
Message:          <none>
InnerException:   <none>
StackTrace (generated):
<none>
StackTraceString: <none>
HResult: 800703e9
********************************
Exception object: 0000029c54761228
Exception type:   System.ExecutionEngineException
Message:          <none>
InnerException:   <none>
StackTrace (generated):
<none>
StackTraceString: <none>
HResult: 80131506
********************************
Exception object: 0000029c547612c8
Exception type:   System.Threading.ThreadAbortException
Message:          <none>
InnerException:   <none>
StackTrace (generated):
<none>
StackTraceString: <none>
HResult: 80131530
********************************
Exception object: 0000029c54761368
Exception type:   System.Threading.ThreadAbortException
Message:          <none>
InnerException:   <none>
StackTrace (generated):
<none>
StackTraceString: <none>
HResult: 80131530

PowerShell在NavigateComplete2事件触发时崩溃

不确定这是否达到了您想要的效果,但如果您只是希望等待导航完成,那么这是一个非常简单的解决方案:

$ie = New-Object -com "InternetExplorer.Application"
$ie.Visible = $true # this may fail with  "800706B5" ("The interface is unknown") if you aren't running PS as administrator
$ie.Navigate("https://www.google.com")
Do {sleep 1} While ($ie.Busy) #sometimes IE takes a second to get busy. 
$ie.document.getelementbyid("q").value = "Powershell IE Automation"
$ie.document.getelementbyid("tsf").submit()
Do {sleep 1} While ($ie.Busy) 
Do {sleep 1} While ($ie.Visible)
Write-Host "Done"