Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] reg.exe - как нежелательное имя для скрипта? (http://forum.oszone.net/showthread.php?t=175846)

semiono 17-05-2010 02:13 1414872

reg.exe - как нежелательное имя для скрипта?
 
Не могу понять в чём я ошибся, но скрипт запускается многократно вплоть до зависания.

Сам код ничего особенного не представляет:
Код:

ProgressOn("MyProg...", "")
ProgressSet(100)

ShellExecute("MyProg.exe", "", @ProgramFilesDir & "\MyProg")
Sleep(3000)

$PID = ProcessExists("MyProg.exe")
ProcessClose($PID)


RegWrite("HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\MyProg.exe", "", "REG_SZ", @ProgramFilesDir & "\MyProg\MyProg.exe")
RegWrite("HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\MyProg.exe", "Path", "REG_SZ", @ProgramFilesDir & "\MyProg")

FileCreateShortcut(@ProgramFilesDir & "\MyProg\MyProg.exe", @UserProfileDir & "\SendTo\MyProg.lnk", @ProgramFilesDir & "\MyProg", "", "MyProg", @ProgramFilesDir & "\MyProg\Sam.ico", "", 0, @SW_SHOWNORMAL)
FileCreateShortcut(@ProgramFilesDir & "\MyProg\MyProg.exe", @ProgramsDir & "\MyProg.lnk", @ProgramFilesDir & "\MyProg", "", "MyProg", @ProgramFilesDir & "\MyProg\Sam.ico", "", 0, @SW_SHOWNORMAL)

$file = FileOpen(@SystemDir & "\Sam.cmd", 10)
FileWrite($file, '@start "" "' & @ProgramFilesDir & '\MyProg\MyProg.exe"' & ' %*' & @CRLF)
FileClose($file)

FileDelete(@ProgramFilesDir & "\MyProg\MyProg.exe")
Sleep(1000)

FileMove(@ProgramFilesDir & "\MyProg\Sam.bin", @ProgramFilesDir & "\MyProg\MyProg.exe", 9)
Sleep(1000)

ProgressOff()

ShellExecute("MyProg.exe", "", @ProgramFilesDir & "\MyProg")

Exit

Всё что мне приходит на ум, это название моего скрипта reg.exe, хотя лгика мне всёравное не ясна.

Ещё одна фитча, то что у меня reg.exe прописан на удаление в реестре в PendingFileRenameOperations,
хотя это тоже как бы не причём.

Причём это сразу не проявилось, толи после кампиляции au3 в exe, вообщем какая-то странность!

semiono 17-05-2010 05:12 1414890

Ничего не понимаю! Имя файла тут тоже не причём. Запускается скрипт рекурсивно, будто бы я такое написал

bat.cmd:
Код:

bat.cmd
Кстати, теперь я приписал к скрипту такое FileDelete(@ScriptName), само по себе это работает, проверял
на отдельном скрипте.

Creat0R 17-05-2010 08:31 1414937

Цитата:

Цитата semiono
Сам код ничего особенного не представляет »

«ShellExecute» на самом деле что запускает?
У меня этот скрипт естественно выдаёт ошибку запуска MyProg.exe.

semiono 17-05-2010 18:00 1415292

Сначала запускается приложение MyProg.exe, потом оно закрывается через ProcessClose()
и файл MyProg.exe удаляется, после чего на его место копируется обновлённая версия MyProg.exe.
Это нужно было для того чтобы в реестр записать установки, так как новая версия MyProg.exe
этого зделать не может, так как она из апдейта идёт. Вообщем подмена такая хитрая.
Ну буду думать дальше что за трабла там... Может с кампиляцией что-то не так?

У меня всегда варианты запуска установленны повсюду:
1. HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\MyProg.exe
2. @SystemDir & "\MyProg.cmd"
Однако, ShellExecute() явно указывает на рабочую папку, причём циклический запуск нигде не предполагается.

Вот сейчас ещё подумалось, может само приложение MyProg.exe так устроенно зачем-то изнутри...
Тогда автоит не причём если так. Ладно, ОК!

Creat0R 17-05-2010 18:44 1415322

Цитата:

Цитата semiono
Сначала запускается приложение...»

Что делает скрипт, я вижду сам :) я спрашиваю что это за приложение MyProg.exe, какое его назначение?

P.S
reg это системная утилита, возможно этот самый MyProg.exe пытается запустить эту команду (консольную утилиту reg.exe), и в первую очередь ищет не в системе, а как раз в рабочем каталоге.

semiono 17-05-2010 21:59 1415486

Я нашёл причину! Всётаки это здесь было...

[HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\MyProg.exe]
@="C:\I\Apps\MyProg\MyProg.exe"

Для корректности первого запуска я все ссылки установил на запуск скрипта, а не самой программы.
После исполнения скрипт сам поправит ссылки на приложение как положено.
Тоесть после инсталяции у меня было так

[HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\MyProg.exe]
@="C:\I\Apps\MyProg\Script.exe"

Ну а далее что видно из скрипта замена:
Код:

RegWrite("HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\MyProg.exe", "", "REG_SZ", @ProgramFilesDir & "\MyProg\MyProg.exe")
Вот как раз из-за того что скрипт прописан в ...CurrentVersion\App Paths\ он и запускается рекурсивно
из под ShellExecute() Хотя по большому счёту это баг то ли в автоит, то ли в Ms API.
Ну не совсем баг, а как бы недочёт. =)

---
Я как-то нагуглил ваш автиоит форум, там обсуждение было FileDelete(@ScriptName),
у меня это чётко работает, может это в новых версиях автоит улучшили?
Или всётаки лучше через cmd /k delete ....ping ... делать? :)

У меня на асме есть ещё решение через PendingFileRenameOperations реестра...
Правда с перезагрузкой.
Код:

include '%fasm%\win32ax.inc'

section '.code' code readable executable

start:
        invoke ExpandEnvironmentStrings,lpDrv,lpStr1,400h
        invoke lstrcat,lpStr1,File1
        invoke MoveFileEx,lpStr1,NULL,MOVEFILE_DELAY_UNTIL_REBOOT
exit:
        invoke  ExitProcess,0

section '.data' data readable writeable

lpDrv  db '%ProgramFiles%',0

File1  db '\Samplitude\Rn5b.exe',0

lpStr1  db ?

section '.idata' import data readable writeable
        library kernel32,'KERNEL32.DLL'
        include '%fasm%\api\kernel32.inc'

Но теперь наверное воспользуюсь FileDelete(@ScriptName)

Creat0R 17-05-2010 22:22 1415507

Цитата:

Цитата semiono
по большому счёту это баг то ли в автоит, то ли в Ms API.
Ну не совсем баг, а как бы недочёт »

Поскольку ответа от тебя я так и не дождался, то осмелюсь сказать что баг у тебя в скрипте или в вызываемой им программе, судя по описанию это неправильный подход для такой задачи (если я её конечно хоть как то понял).

P.S
Тема решена?

semiono 17-05-2010 22:30 1415518

Creat0R, а что даст название программы, я вовсе не скрывал этого!?
Просто какая разница калькулятор, блокнот или Samplitude.exe это будет?
Конечно я не прав что сразу достаточно информации не предоставил, но я и сам гадаю что там было.

Однако сейчас понял, нельзя было скрипт сюда прописывать:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Sam.exe
Вот сейчас ещё один момент проверил, оказывается Run() работает правильно невзирая на реестр.
Ну собственно ShellExecute() привязан к оболочке по своей сути, а часть реестра App Paths, это тоже
привязка к оболочке насколько я понимаю.

---
FileDelete(@ScriptName) не работает, я зря радовался, беру слова обратно.

---
Тема решена! :)

Creat0R 17-05-2010 23:08 1415560

Цитата:

Цитата semiono
FileDelete(@ScriptName) не работает »

Работает только для нескомпилированных скриптов, но это уже не по теме, т.ч на эту тему оффтоп заканчиваем.


Время: 18:55.

Время: 18:55.
© OSzone.net 2001-2025