Что нового

[Баг] Постоянный запуск RunDll32 при использовании InetGet в Windows 7

SyDr

Сидра
Сообщения
651
Репутация
158
Честно говоря, я не уверен, что дело в InetGet (может InetGetInfo, а может вообще это настройки моей системы). Поэтому мне нужна помощь, чтобы разобраться.
Говорят, в XP работает, как надо.

После нажатия кнопки старт, через некоторое время курсор начинает менять свой вид с обычного на "загрузка" и назад. Проверка показала, что во время работы происходит постоянный запуск "C:\Windows\system32\rundll32.exe" "C:\Windows\system32\WININET.dll",DispatchAPICall 1 . Среднее время жизни процесса - 200-300 мс.

Прошу помочь разобраться в том, что же это такое:
1) Баг AutoIt
2) Баг Windows 7
3) Какие-либо настройки именно в моей системе.

Код.
Для тестирования. Файл DownLoad.txt должен содержать ссылки для скачки. По одной на строчку. Чем выше скорость соединения - тем больше нужно ссылок :smile: (ну или выбирать вещи покрупнее).
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>
AutoItSetOption("GUIOnEventMode", 1)

Global Const $nMaxStreams = 6
Global $sDownloadToFolder = @ScriptDir & "\"
Global $avMSD[$nMaxStreams][5]
Global $avMSDS[1][3]
Global $nStackToDownload = 0
Global $avMSDC[$nMaxStreams][2]
Global $nStackDownloaded = 0
Global $nTotalImagesDownloaded = 0
$hGUIMain 	= GUICreate("Foto.Tut.By Downloader", 801, 617, 225, 148)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUIExit")
$hButtonAdd		= GUICtrlCreateButton("Старт", 480, 8, 313, 25, 0)
$hButtonExit	= GUICtrlCreateButton("Выход", 480, 488, 313, 25, 0)
GUICtrlSetOnEvent($hButtonAdd, "GUIProcess")
GUICtrlSetOnEvent($hButtonExit, "GUIProcess")
GUISetState(@SW_SHOW)
While 1
	Sleep(1000)
	MultiStreamDownload()
WEnd
Func GUIProcess()
	Switch @GUI_CtrlId
		Case $hButtonAdd
			Dim $x
			_FileReadToArray("DownLoad.txt", $x)
			For $i = 1 To $x[0]
				MultiStreamDownload($x[$i], $sDownloadToFolder & "\xx" & $i & ".html")
			Next
		Case $hButtonExit
			GUIExit()
	EndSwitch
EndFunc

Func GUIExit()
	Exit
EndFunc

Func MultiStreamDownload($sURL = "", $sPath = "", $nOptions = 0)
	Local $nCount
	Local $bStack = True
	If $sURL = "" And $sPath = "" Then $bStack = False

	For $nCount = 0 To $nMaxStreams - 1
		If $avMSD[$nCount][0] Then
			If InetGetInfo($avMSD[$nCount][1], 2) Then
				InetClose($avMSD[$nCount][1])
				$avMSD[$nCount][0] = False
				If $nOptions <> 0 Then
					$avMSDC[$nStackDownloaded][0] = $avMSD[$nCount][3]
					$avMSDC[$nStackDownloaded][1] = $avMSD[$nCount][4]
					$nStackDownloaded += 1
				Else
					$nTotalImagesDownloaded += 1
				EndIf
			EndIf
		EndIf

		If $avMSD[$nCount][0] = False Then
			If $nStackToDownload > 0 Then
				$nStackToDownload -= 1
				$avMSD[$nCount][0] = True
				$avMSD[$nCount][1] = InetGet($avMSDS[$nStackToDownload][0], $avMSDS[$nStackToDownload][1], 0, 1)
				$avMSD[$nCount][2] = $avMSDS[$nStackToDownload][0]
				$avMSD[$nCount][3] = $avMSDS[$nStackToDownload][1]
				$avMSD[$nCount][4] = $avMSDS[$nStackToDownload][2]
			Else
				If $bStack Then
					$bStack = False
					$avMSD[$nCount][0] = True
					$avMSD[$nCount][1] = InetGet($sURL, $sPath, 0, 1)
					$avMSD[$nCount][2] = $sURL
					$avMSD[$nCount][3] = $sPath
					$avMSD[$nCount][4] = $nOptions
				EndIf
			EndIf
		EndIf
	Next

	If $bStack Then
		If UBound($avMSDS, 1) = $nStackToDownload Then ReDim $avMSDS[UBound($avMSDS, 1) * 2][3]
		$avMSDS[$nStackToDownload][0] = $sURL
		$avMSDS[$nStackToDownload][1] = $sPath
		$avMSDS[$nStackToDownload][2] = $nOptions
		$nStackToDownload += 1
		If (UBound($avMSDS, 1) - $nStackToDownload)/$nStackToDownload > 10 Then ReDim $avMSDS[$nStackToDownload + 1][3]
	EndIf
EndFunc
 
Автор
SyDr

SyDr

Сидра
Сообщения
651
Репутация
158
Проблема решена. Причина: при каждом вызове InetGet AutoIt форсирует проверку соединения (т. е. если его нет, появляется стандартный диалог подключения, а AutoIt в это время терпеливо ждёт).

By default AutoIt forces a connection before starting a download. For dial-up users this will prompt to go online or dial the modem (depending on how the system is configured). The options value 16 disables this behavior. Disabling the behavior can be useful for persistent connects (Broadband, LAN). However, it is also required to work around certain issues in Windows Vista and Windows 7.
 
Верх