Что нового

Дождаться завершения работы программы

gdu

Новичок
Сообщения
20
Репутация
0
Всем привет!
Нужна помощь в правке кода, суть задачи запустить с сервера *.msi приложение в тихом режиме, дождаться завершения установки и скопировать файл registrymodifications.xcu в нужную папку. У меня в моем коде ничего не запускается кроме MsgBox (64, "Установка "&$app_name, @LF&"Установка "&$app_name&" успешно завершена!") Где у меня ошибка???????
Код:
#RequireAdmin
#include <GUIConstants.au3>
#include <File.au3>

$app_name = ("LibreOffice_5.2.5_Win_x86")

ProcessWaitClose("LibreOffice_5.2.5_Win_x86.msi")

$MapDrv = DriveMapAdd("*", "\\192.168.0.13\install\Авто\OpenOffice")
If @error = 0 Then
    SplashTextOn ("Установка "&$app_name, @LF&"Происходит установка "&$app_name&@LF&"Пожалуйста, подождите..."&@LF&@LF&"- копирование файлов...", 500, 130)
   RunWait('msiexec.exe /i "' & $MapDrv & 'LibreOffice_5.2.5_Win_x86.msi" /s /quiet /norestart')

$PID = Run("LibreOffice_5.2.5_Win_x86.msi")

ProcessWaitClose($PID)

;......................

EndIf
sleep(1000)


SplashOff ()
FileCopy ($temp_path&"\registrymodifications.xcu", @AppDataDir&'\LibreOffice\4\user\registrymodifications.xcu', 9)
MsgBox (64, "Установка "&$app_name, @LF&"Установка "&$app_name&" успешно завершена!")
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
gdu
MSI - это файл. Как, например, AVI. Вы же не будете ждать завершение процесса kino.avi ? Вы будете ждать завершение процесса того плеера, который с этим файлом ассоциирован. А с msi ассоциирован msiexec.exe. И запускать ассоциированные файлы нужно через ShellExecute, а не через Run.
Другой момент в том, что не всегда установщики msi запускаются с сетевых дисков. Лучше скопируйте файл в локальную папку и удалите после установки.
 
Автор
G

gdu

Новичок
Сообщения
20
Репутация
0
InnI сказал(а):
gdu
MSI - это файл. Как, например, AVI. Вы же не будете ждать завершение процесса kino.avi ? Вы будете ждать завершение процесса того плеера, который с этим файлом ассоциирован. А с msi ассоциирован msiexec.exe. И запускать ассоциированные файлы нужно через ShellExecute, а не через Run.
Другой момент в том, что не всегда установщики msi запускаются с сетевых дисков. Лучше скопируйте файл в локальную папку и удалите после установки.
В том и дело что вариант с копированием у меня работает, но процесс копирования задерживает весь процесс установки, вот и хотелось бы ускорить весь этот этап.
И даже если я меняю в коде
Код:
#RequireAdmin
#include <GUIConstants.au3>
#include <File.au3>

$app_name = ("LibreOffice_5.2.5_Win_x86")

ProcessWaitClose("msiexec.exe")

$MapDrv = DriveMapAdd("*", "\\192.168.0.13\install\Авто\OpenOffice")
If @error = 0 Then
    SplashTextOn ("Установка "&$app_name, @LF&"Происходит установка "&$app_name&@LF&"Пожалуйста, подождите..."&@LF&@LF&"- копирование файлов...", 500, 130)
   ShellExecute('msiexec.exe /i "' & $MapDrv & 'LibreOffice_5.2.5_Win_x86.msi" /s /quiet /norestart')

$PID = Run("msiexec.exe")

ProcessWaitClose($PID)

;......................

EndIf
sleep(1000)


SplashOff ()
FileCopy ($temp_path&"\registrymodifications.xcu", @AppDataDir&'\LibreOffice\4\user\registrymodifications.xcu', 9)
MsgBox (64, "Установка "&$app_name, @LF&"Установка "&$app_name&" успешно завершена!")

То ни чего так же не происходит....В чем может быть загвостка???
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
gdu
процесс копирования задерживает весь процесс установки
Ничего подобного. Когда вы запускаете файл на сетевом диске, он всё равно ПОЛНОСТЬЮ копируется в память локальной машины. А если производится проверка издателя для запроса UAC, то копируется два раза.

Процессов msiexec.exe может быть несколько. Убедитесь в диспетчере задач, что перед запуском скрипта ни одного такого процесса нет. Затем проверьте каждую функцию на предмет возврата ошибки. Когда найдёте проблемную функцию, тогда и можно думать дальше.


Добавлено:
Сообщение автоматически объединено:

если я меняю в коде
У функций Run и ShellExecute разные параметры. Откройте справку и сравните.
 

op_joke

Новичок
Сообщения
20
Репутация
0
Я в своем домене как то обновление накатывал с помощью скрипта, и делал это через консоль, что бы не видно было, и что бы от админа запустить. Может тут так же прокатит?

Код:
; Параметры учетной записи
    Local $sUserName = "UserName"
    Local $sPassword = "Password"
	Local $sDomain = "Domain"

	; Команда для CMD
	Local $sCMD = @ComSpec & " /c " & 'wusa.exe \\10.10.0.1\softdistrib\updtime\Windows6.1-KB******-x86.msu' & ' /quiet /norestart'

    ; Запуск CMD от имени Администратора, вставка команды
    RunAs($sUserName, $sDomain, $sPassword, 0, $sCMD, "", @SW_HIDE
 
Автор
G

gdu

Новичок
Сообщения
20
Репутация
0
InnI сказал(а):
gdu
процесс копирования задерживает весь процесс установки
Ничего подобного. Когда вы запускаете файл на сетевом диске, он всё равно ПОЛНОСТЬЮ копируется в память локальной машины. А если производится проверка издателя для запроса UAC, то копируется два раза.

Процессов msiexec.exe может быть несколько. Убедитесь в диспетчере задач, что перед запуском скрипта ни одного такого процесса нет. Затем проверьте каждую функцию на предмет возврата ошибки. Когда найдёте проблемную функцию, тогда и можно думать дальше.


Добавлено:
Сообщение автоматически объединено:

если я меняю в коде
У функций Run и ShellExecute разные параметры. Откройте справку и сравните.



Может я чего не понимаю: в моем примере происходит следующее создается папка temp и в нее копируется Office_5.2.5_Win_x86.msi, потом происходит запуск с папки TEMP, может есть какой то другой вариант запуска приложения? подскажите, без копирования в отдельную папку?
Код:
$temp_path = ("c:\temp\")
$app_name = ("Office_5.2.5_Win_x86")

$ocs86=@ScriptDir &' \\192.168.0.13\install\Авто\OpenOffice\Office_5.2.5_Win_x86.msi'  ;путь к установке для х86

DirCreate ($temp_path)
FileInstall ("C:\Users\admin\Desktop\Office_5.2.5_Win_x86\Office_5.2.5_Win_x86.msi", $temp_path&"LibreOffice_5.2.5_Win_x86.msi", 1)
FileInstall ("C:\Users\admin\Desktop\Setup LibreOffice_5.2.5_Win_x86\registrymodifications.xcu", $temp_path&"registrymodifications.xcu", 1)


   SplashTextOn ("Установка "&$app_name, @LF&"Происходит установка "&$app_name&@LF&"Пожалуйста, подождите..."&@LF&@LF&"- копирование файлов...", 500, 130)
  RunWait('msiexec.exe /i "' & $temp_path & 'Office_5.2.5_Win_x86.msi" /quiet /norestart')
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
gdu
без копирования в отдельную папку
Использование функции FileInstall подразумевает извлечение файла из скрипта на диск. По другому она не работает. Но можно не создавать отдельную папку, а использовать готовую системную
Код:
@TempDir
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
gdu

Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


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