Что нового

Скрипт, скомпилированный в .exe, работает только там где установлен AutoIT.

lavio

Новичок
Сообщения
9
Репутация
0
Создал себе скриптик, который устанавливает различные вещи на ОС (directx, framework и т.д.) для упрощения жизни. Однако работает он только там где был создан. То есть у меня есть машина на ней установлен autoit, конвертер в exe, и редактор. На ней создаю скрипт конвертирую в exe, запускаю все работает. Копирую на флешку всю папку (все пути в скрипте указаны относительно корня папки, а "установщик" лежит в самом корне папки). Запускаю на другом компе, мой установщик запускает окно с приветствием, запускают статусные сообщение, однако сами установщики от софта не запускаются. В чем может быть проблема? Возможно в компиляторе где-то есть галочка включить в exe все необходимые библиотеки или что-то похожее? Я такой не нашел.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
lavio,
Покажите Ваш скрипт.
 
Автор
L

lavio

Новичок
Сообщения
9
Репутация
0
Код:
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <SendMessage.au3> ;Needed for _SendMessage function.
#include <ProgressConstants.au3>
#include <GUIConstantsEx.au3>
Global $hSplash
Func _SplashTextProgress($sText)
       SplashOff() ;Turn previous splash text screens off.
       $hSplash = GUICreate("", 500, 150, -1, -1, BitOR($WS_POPUP, $WS_BORDER), BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE, $WS_EX_TOOLWINDOW))
       $iProgressBar = GUICtrlCreateProgress(30, 100, 440, 35, $PBS_MARQUEE) ;A Marquee progress bar.
       _SendMessage(GUICtrlGetHandle(-1), $PBM_SETMARQUEE, True, 80) ;last parameter is update time in ms. Sends message to run the Marquee progress bar.
       $iMessage = GUICtrlCreateLabel($sText, 0, 20, 500, 50, $SS_CENTER)
       GUICtrlSetFont(-1, 16, 500, 0, "Courier New")
       GUISetState(@SW_SHOW)
       Return SetExtended($iProgressBar, $hSplash)

EndFunc

$hProgressSplash = _SplashTextProgress("Внимание! Идет установка компонетов. Ждите...")
MsgBox(4096, "Отчет", "Установка DirectX", 5)
RunWait('"DirectX\Unzip\DXSETUP.exe" /silent')
MsgBox(4096, "Отчет", "DirectX установлен", 3)
Switch @OSVersion
	Case "WIN_7"
		Switch @OSArch
			Case "X86"
				MsgBox(4096, "Отчет", "Установка обновления времени для Windows 7 x32", 5)
				RunWait('"Time\Windows6.1-KB2570791-x86.msu" /quiet')
			Case "X64"
				MsgBox(4096, "Отчет", "Установка обновления времени для Windows 7 x64", 5)
				RunWait('"Time\Windows6.1-KB2570791-x64.msu" /quiet')
		EndSwitch
	Case "WIN_XP"
		MsgBox(4096, "Отчет", "Установка обновления времени для ОС Windows 7 x64", 5)
		RunWait('"Time\WindowsXP-KB2570791-x86-RUS.exe" /quiet')
EndSwitch
MsgBox(4096, "Отчет", "Обновление времени установлено", 3)

Switch @OSVersion
	Case "WIN_7"
		MsgBox(4096, "Отчет", "Установка фреймворка для Windows 7", 5)
		RunWait('"Net. Framework\dotNetFx40_Full_x86_x64.exe" -c -aiq /quiet /norestart')
		MsgBox(4096, "Отчет", "Фреймворк 4.0 установлен", 3)
		RunWait('"Net. Framework\dotNetFx45_Full_x86_x64.exe" -c -aiq /quiet /norestart')
		MsgBox(4096, "Отчет", "Фреймворк 4.5 установлен", 3)
		RunWait('"Net. Framework\NDP451-KB2858728-x86-x64-AllOS-ENU.exe" -c -aiq /quiet /norestart')
		MsgBox(4096, "Отчет", "Фреймворк 4.5.1 установлен", 3)
	Case "WIN_XP"
		MsgBox(4096, "Отчет", "Установка фреймворка для Windows XP", 5)
		RunWait('"Net. Framework\dotnetfx35setup.exe" -c -aiq /quiet /norestart')
		MsgBox(4096, "Отчет", "Фреймворк 3.5 установлен", 3)
		RunWait('"Net. Framework\dotNetFx40_Full_x86_x64.exe" -c -aiq /quiet /norestart')
		MsgBox(4096, "Отчет", "Фреймворк 4.0 установлен", 3)
EndSwitch
MsgBox(4096, "Отчет", "Установка фреймворков закончена", 3)

Switch @OSArch
	Case "X86"
		MsgBox(4096, "Отчет", "Установка пакета MS Vusal C++ для x32 ОС", 5)
		RunWait('"Microsoft Visual C++\VCRHyb86.exe" -c /S')
		MsgBox(4096, "Отчет", "Библиотеки C++ установлены", 3)
	Case "X64"
		MsgBox(4096, "Отчет", "Установка пакета MS Vusal C++ для x64 ОС", 5)
		RunWait('"Microsoft Visual C++\VCRHyb64.exe" -c /S')
		MsgBox(4096, "Отчет", "Библиотеки C++ установлены", 3)
EndSwitch

GUIDelete($hSplash)
GUICreate('Завершение установки', 420, 100)
GUICtrlCreateLabel("Установка завершена. Компьютер будет перезагруженч ерез 10 секунд.",20,20)
GUISetState(@SW_SHOW)
Sleep(10000)
Shutdown(2)

Даже если выкинуть код отвечающий за прогрессбар, проблема остается.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 
Автор
L

lavio

Новичок
Сообщения
9
Репутация
0
По самой проблеме ответ будет? :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
lavio [?]
По самой проблеме ответ будет?
Будет, но только после адекватной реакции на предупреждение. Сам исправил на нужные теги.
Добавьте в начало скрипта
Код:
If @WorkingDir <> @ScriptDir Then FileChangeDir(@ScriptDir)
Или все пути поменяйте по этому примеру
Код:
RunWait('"' & @ScriptDir & '\DirectX\Unzip\DXSETUP.exe" /silent')
 
Автор
L

lavio

Новичок
Сообщения
9
Репутация
0
Попробовал оба варианта - не помогли.
1) Добавил следующим образом
Код:
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <SendMessage.au3> ;Needed for _SendMessage function.
#include <ProgressConstants.au3>
#include <GUIConstantsEx.au3>
If @WorkingDir <> @ScriptDir Then FileChangeDir(@ScriptDir)
Global $hSplash
...

2) Изменил все пути на аналоги примера. Несколько раз перепроверил все кавычки в путях.
И в том и в другом случае ведет себя также как и раньше.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
lavio,
не могли бы вы указать на какой ОС вы компилируете скрипт?
Весь процесс работы скрипта насыщен окнами. Какое последнее собщение показывается при запуске .exe на компьютере пользователя?
Вы указали в профайле версию AutoIt 3.3.8.1. Это актуальные цифры? Так и есть?

И теперь самое главное. Если на компьютере пользователя установить AutoIt (просто установить и всё), а потом запустить ваш .exe, он будет работать?
(попробуйте, пожалуйста, на одном компе в качестве теста)
 
Автор
L

lavio

Новичок
Сообщения
9
Репутация
0
C2H5OH,
компилируется на win7 x32, запускал пока на win7 x32(На которой компилил) и на win7 x64.
Да версия 3.3.8.1.
Если установить AutoIT на клиента (win7 x64) то все ставится как надо. Попозже попробую на виртуалке поднять голую win7 x32 и там проверить.

InnI,
Скрипт запускается из-под админской учетки.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
lavio [?]
И в том и в другом случае ведет себя также как и раньше.
Что будет показывать этот код?
Код:
MsgBox(64, 'DXSETUP.exe', 'FileExists(' & @ScriptDir & '\DirectX\Unzip\DXSETUP.exe) = ' & FileExists(@ScriptDir & '\DirectX\Unzip\DXSETUP.exe'))
Switch @OSVersion
	Case 'WIN_7'
		Switch @OSArch
			Case 'X86'
				MsgBox(64, 'Windows6.1-KB2570791-x86.msu', 'FileExists(' & @ScriptDir & '\Time\Windows6.1-KB2570791-x86.msu) = ' & _
						FileExists(@ScriptDir & '\Time\Windows6.1-KB2570791-x86.msu'))
			Case 'X64'
				MsgBox(64, 'Windows6.1-KB2570791-x64.msu', 'FileExists(' & @ScriptDir & '\Time\Windows6.1-KB2570791-x64.msu) = ' & _
						FileExists(@ScriptDir & '\Time\Windows6.1-KB2570791-x64.msu'))
		EndSwitch
	Case 'WIN_XP'
		MsgBox(64, 'WindowsXP-KB2570791-x86-RUS.exe', 'FileExists(' & @ScriptDir & '\Time\WindowsXP-KB2570791-x86-RUS.exe) = ' & _
				FileExists(@ScriptDir & '\Time\WindowsXP-KB2570791-x86-RUS.exe'))
EndSwitch
Switch @OSVersion
	Case 'WIN_7'
		MsgBox(64, 'dotNetFx40_Full_x86_x64.exe', 'FileExists(' & @ScriptDir & '\Net. Framework\dotNetFx40_Full_x86_x64.exe) = ' & _
				FileExists(@ScriptDir & '\Net. Framework\dotNetFx40_Full_x86_x64.exe'))
		MsgBox(64, 'dotNetFx45_Full_x86_x64.exe', 'FileExists(' & @ScriptDir & '\Net. Framework\dotNetFx45_Full_x86_x64.exe) = ' & _
				FileExists(@ScriptDir & '\Net. Framework\dotNetFx45_Full_x86_x64.exe'))
		MsgBox(64, 'NDP451-KB2858728-x86-x64-AllOS-ENU.exe', 'FileExists(' & @ScriptDir & '\Net. Framework\NDP451-KB2858728-x86-x64-AllOS-ENU.exe) = ' & _
				FileExists(@ScriptDir & '\Net. Framework\NDP451-KB2858728-x86-x64-AllOS-ENU.exe'))
	Case 'WIN_XP'
		MsgBox(64, 'dotnetfx35setup.exe', 'FileExists(' & @ScriptDir & '\Net. Framework\dotnetfx35setup.exe) = ' & _
				FileExists(@ScriptDir & '\Net. Framework\dotnetfx35setup.exe'))
		MsgBox(64, 'dotNetFx40_Full_x86_x64.exe', 'FileExists(' & @ScriptDir & '\Net. Framework\dotNetFx40_Full_x86_x64.exe) = ' & _
				FileExists(@ScriptDir & '\Net. Framework\dotNetFx40_Full_x86_x64.exe'))
EndSwitch
Switch @OSArch
	Case 'X86'
		MsgBox(64, 'VCRHyb86.exe', 'FileExists(' & @ScriptDir & '\Microsoft Visual C++\VCRHyb86.exe) = ' & _
				FileExists(@ScriptDir & '\Microsoft Visual C++\VCRHyb86.exe'))
	Case 'X64'
		MsgBox(64, 'VCRHyb64.exe', 'FileExists(' & @ScriptDir & '\Microsoft Visual C++\VCRHyb64.exe) = ' & _
				FileExists(@ScriptDir & '\Microsoft Visual C++\VCRHyb64.exe'))
EndSwitch
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
lavio [?]
Скрипт запускается из-под админской учетки.
И что? Если включён UAC, то для установки ваших приложений нужны права администратора, а не админская учётка.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
У меня с 3.3.10.2 похожая проблема. Правда, там я использую исключительно IE.au3. Но тоже все начинает работать, если установить пользователю AutoIt.
Так что я так же очень интересуюсь какие опции нужно указать при компиляции, чтобы в .exe вошло всё-всё что нужно.
 
Автор
L

lavio

Новичок
Сообщения
9
Репутация
0
madmasles,
Показывает:
FileExists(C:\users\1\desktop\instal\DirectX\DXSETUP.exe) = 1
 
Автор
L

lavio

Новичок
Сообщения
9
Репутация
0
madmasles,
Да.

InnI,
Огромное спасибо! Проблемой и правда оказался включенный UAC. Век живи век учись)
Проблема решена.
Остался небольшой вопрос. Возможно ли с помощью AutoIT отключить и включить UAC? Можно просто подсказать с какого краю начать копать чтобы найти ответ :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
lavio [?]
Остался небольшой вопрос.
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.
 
Верх