#1056 closed Bug (Completed)
InetGet rundll32.exe error on Vista / Windows 7 on "Screen-saver" desktop
| Reported by: | Owned by: | Valik | |
|---|---|---|---|
| Milestone: | 3.3.1.5 | Component: | AutoIt |
| Version: | 3.3.0.0 | Severity: | Blocking |
| Keywords: | Cc: |
Description
InetGet("valid url") generates an error window:
"rundll32.exe - Application Error"
"The application failed to initilize properly (0xc0000142). Click OK to terminate the application."
The issue only occurs on Windows Vista or Windows 7 when the system is displaying the "Screen-saver" desktop.
To duplicate the error:
- Compile this script
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $getting = 0
Global $windowinfodata = 0
_EnumDesktops()
GUICreate(Default,400,280)
$url = "http://www.irs.gov/pub/irs-pdf/fw4.pdf"
$label = GUICtrlCreateLabel("No Results",10,10,200,50)
$label2 = GUICtrlCreateLabel($windowinfodata,220,10,150,300)
$input = GUICtrlCreateInput($url,10,120,350,25)
$buttonI = GUICtrlCreateButton("InetGet Input", 10, 150)
$buttonP = GUICtrlCreateButton("Run Input", 10, 180)
$buttonIE = GUICtrlCreateButton("Run Internet Explorer", 10, 210)
$buttonD = GUICtrlCreateButton("Get Desktops", 10, 240)
GUISetState(@SW_SHOW)
; Run the GUI until the dialog is closed
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
GUIDelete()
Exit
Case $msg = $buttonD
GUICtrlSetData($label2, "")
Sleep(100)
_EnumDesktops()
GUICtrlSetData($label2, $windowinfodata)
Case $msg = $buttonI
$url = GUICtrlRead($input)
$new = InetGet($url,@TempDir & "\" & StringMid($url,StringInStr($url,"/",0,-1)+1),1,1)
$getting = 1
GUICtrlSetData($label, $new)
Case $msg = $buttonP
$url = GUICtrlRead($input)
$new = Run($url)
GUICtrlSetData($label, "ProcessID: " & $new)
Case $msg = $buttonIE
$new = Run("C:\Program Files\Internet Explorer\iexplore.exe")
GUICtrlSetData($label, "ProcessID: " & $new)
Case Else
;nothing
EndSelect
If $getting = 1 Then
GUICtrlSetData($label, @InetGetBytesRead)
If @InetGetActive = 0 Then
$getting = 0
GUICtrlSetData($label, @InetGetBytesRead & " done.")
EndIf
EndIf
WEnd
GUIDelete()
Exit
;enum desktops
Func _EnumDesktops()
$windowinfodata = ""
$HWNDWindowStation = DllCall("user32.dll", "HWnd", "GetProcessWindowStation")
$handle2 = DLLCallbackRegister("_EnumDesktopProc", "int", "str;lParam")
DllCall("user32.dll", "int", "EnumDesktops", "HWnd", $HWNDWindowStation[0], "ptr", DllCallbackGetPtr($handle2), "lparam", 10)
EndFunc
Func _EnumDesktopProc($lpszDesktop, $lParam)
$windowinfodata = "Desktop: " & $lpszDesktop & @CRLF & $windowinfodata
Return 1
EndFunc
- Rename the script from .exe to .scr.
- Copy the script to C:\Windows\System32\
- In C:\Windows\System32\ Right-click on the script scr & select install.
- Close the script when it runs.
- In Screen Saver Settings check On resume, display logon screen.
- Close Screen Saver Settings and wait for screen saver to start.
- Click InetGet Input.
- Error 0xc0000142 should be displayed.
I have tested with Vista / Windows 7 / IE7 / IE8 / AutoIt 3.3.0.0 / AutoIt 3.3.1.1 all fail.
It does not error on Windows XP.
Stumbled across this while implamenting automatic update functionality into a screen saver.
The "Screen-saver" desktop is created only when "On resume, display logon screen" is checked.
Attachments (0)
Change History (11)
comment:1 by , 17 years ago
| Resolution: | → Fixed |
|---|---|
| Status: | new → closed |
comment:2 by , 17 years ago
| Resolution: | Fixed |
|---|---|
| Status: | closed → reopened |
comment:3 by , 17 years ago
| Resolution: | → No Bug |
|---|---|
| Status: | reopened → closed |
comment:4 by , 17 years ago
The user is still logged in when the locked Screen-saver desktop is displayed.
The only change is the active desktop, that is why I included a button for Internet Explorer in my example because IE runs fine & even downloads files.
If you check SysInternals process explorer you will see what I mean. The screen saver is run as the logged in user, even when the desktop is locked.
The system creates a second desktop called Screen-saver, switches to it, & runs the app. The regular "Default" desktop still exists, it just doesn't have focus.
InetGet() works properly at the system login prompt (not the user locked desktop login).
At system login screen the screen saver is run by SYSTEM on XP & LOCAL SERVICE on Vista/W7, so the theory that a user needs to be logged into the PC for InetGet() to work is incorrect.
It's definitely a bug of some kind. Please, please take a look before closing the ticket again.
comment:5 by , 17 years ago
| Resolution: | No Bug |
|---|---|
| Status: | closed → reopened |
I reopen so Valik or other dev can have a look. For me the security token is not validate when this screen saver run that's the reason of the failure
comment:6 by , 17 years ago
| Owner: | set to |
|---|---|
| Status: | reopened → assigned |
comment:7 by , 16 years ago
| Severity: | None → Blocking |
|---|
comment:8 by , 16 years ago
Well that's kind of obscure. By default AutoIt sets a flag to force you online before it tries to use your connection. On Vista/Windows 7 the OS apparently tries to force you online even when you are already online. I guess the "force online" stuff is shelled off to rundll32.exe or something which fails.
It's a pretty simple fix. I'll add a flag along the lines of "do not force online state" which will by-pass the setting of the flag. This will leave the default behavior as is but provide the option to by-pass the check for people who don't need it or can't use it.
comment:9 by , 16 years ago
Addendum: I figured this out by modifying the script to run Process Explorer so I could see what process was running when I hit the button and received the error message. From there I found this which didn't work but did give me enough of a hint to know what to test in AutoIt.
comment:10 by , 16 years ago
| Milestone: | → 3.3.1.5 |
|---|---|
| Resolution: | → Completed |
| Status: | assigned → closed |
Added by revision [5347] in version: 3.3.1.5
comment:11 by , 16 years ago
This has been solved in 3.3.1.5 thanks to a new option for InetGet(). See the documentation in 3.3.1.5 for the new flag.

You cannot run under screen saver a function which need to be loggin as you request the "On Resume, display logon screen" which means that when the screen saver fire no user are logon