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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Скрипт, проверяющий программу и предлагающий ее запустить если она вырубилась (http://forum.oszone.net/showthread.php?t=336427)

koresaram 28-08-2018 08:28 2828879

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

исходные данные:
на компе должна работать программа c:programm files/proga.exe
периодически она вылетает и ее приходится запускать руками
пояснение - прога на удаленном компе и там нет мышки клавиатуры (там тач пад можно пальцем в экран ткнуть), чтобы пользователь смог зам ее запустить (мышкой и клавиатурой прогу запустить можно только из диспетчера задач). Приходится подключаться по тимке и включать им ее.

надо:
скрипт, который будет, к примеру, каждые 10 минут проверять наличие процесса proga.exe и если такой процесс не обнаружен, выводить окно на экран с предложением запустить программу Да/Нет
соответственно при нажатии на Да - запускается proga.exe а при нажатии на Нет скрипт уходит в свой обычный режим и через 10 минут снова предложит запустить прогу. И еще этот скрипт должен выключать процесс експлорера (при вылете программы этой остается окно "Мой компьютер"

Код:

Option Explicit
Dim objWMIService, objProcess, colProcess
Dim strComputer, strProcessKill
Dim WshShell
strComputer = "."
strProcessKill = "'explorer.exe'"

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")

Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = " & strProcessKill )
For Each objProcess in colProcess
objProcess.Terminate()
Next

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "c:\Program Files\PROGA.exe" & Chr(34), 0
Set WshShell = Nothing

WScript.Quit

есть вот такая штука (файл сценария VBScript). Если в нее ткнуть, то прога запускается и експлорер убирается. Вот если к ней еще интерактив прикрутить будет хорошо/

YuS_2 28-08-2018 08:55 2828884

Цитата:

Цитата koresaram
прога на удаленном компе и там нет мышки клавиатуры »

Цитата:

Цитата koresaram
выводить окно на экран с предложением запустить программу Да/Нет »

Шлем распознавания мысленных команд? :)

koresaram 28-08-2018 09:13 2828888

Цитата:

Цитата YuS_2
Шлем распознавания мысленных команд? »

поправил описание. там тачпад ) пальцем можно ткнуть в экран )

Busla 28-08-2018 10:11 2828895

koresaram, создайте примерно такую задачу на каждые 10 минут:
Код:

cmd.exe /c "tasklist | findstr /B notepad.exe || "c:\Windows\notepad.exe""
UPD упустил из вида, что вам нужно интерактивное взаимодейсвие с пользователем, тогда действительно лучше WSH

тачпад - это сенсорный квадратик на ноутбуках под клавиатурой, а "пальцем в экран" - это тачскин

YuS_2 28-08-2018 11:58 2828922

Цитата:

Цитата koresaram
пальцем можно ткнуть в экран »

можно на powershell организовать скрипт, если устроит.
wait-process будет ожидать завершения процесса, а по завершении можно прикрутить действие на запуск формы с кнопками... в общем, варианты есть, но если требуется именно wsh...

koresaram 28-08-2018 12:05 2828923

Цитата:

Цитата YuS_2
можно на powershell организовать скрипт, если устроит.
wait-process будет ожидать завершения процесса, а по завершении можно прикрутить действие на запуск формы с кнопками... в общем, варианты есть, но если требуется именно wsh... »

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

Цитата:

Цитата Busla
тачпад - это сенсорный квадратик на ноутбуках под клавиатурой, а "пальцем в экран" - это тачскин »

да тачскрин, согласен )

Iska 28-08-2018 12:35 2828931

Цитата:

Цитата koresaram
скрипт, который будет, к примеру, каждые 10 минут проверять наличие процесса proga.exe и если такой процесс не обнаружен, выводить окно на экран с предложением запустить программу Да/Нет
соответственно при нажатии на Да - запускается proga.exe а при нажатии на Нет скрипт уходит в свой обычный режим и через 10 минут снова предложит запустить прогу. »

В чём глубинный смысл действий скрипта в этом случае?! Я не понимаю.

Я понимаю так: скрипт проверяет наличие исполняемого файла приложения. Скрипт запускает приложение. Скрипт следит за тем, что приложение работает (причём — именно за тем экземпляром приложения, который был запущен самим скриптом, игнорируя любые прочие экземпляры того же приложения). Как только данный экземпляр приложения завершается — скрипт немедленно запускает новый экземпляр и начинает следить за ним.

koresaram 28-08-2018 13:13 2828935

Цитата:

Цитата Iska
В чём глубинный смысл действий скрипта в этом случае?! Я не понимаю. »

смысл в следующем - есть кассовая программа (компы это кассы в магазинах). И эта кассовая proga.exe периодически вылетает. То есть в процессах она пропадает (и вместо нее выходит окно експлорера "Мой компьютер". Ее надо включать, чтобы касса работала дальше. На текущий момент продавец звонит и сообщает что программа вылетела (я подключаюсь по тимке и запускаю ее через диспетчер задач). То есть процесс там один. Их не может быть 2 (второй не запустится, а выдаст сообщение, что прога уже запущена. Это в самой проге заложено).

То есть скрипт чекает наличие процесса proga.exe если процесс есть - значит прога работает и делать ничего не надо (следующий чек через 10 минут). Если процесса нет -выводится интерактивное окно - Включить кассу? Да/Нет. Возникает вопрос а зачем тогда Нет? Бывают случаи, когда программу надо принудительно выключить (например обновляется бд, а при включенной проге обращение к бд не дает скопировать файлы). вот для этого случая нужен вариант Нет.

YuS_2 28-08-2018 13:42 2828938

Цитата:

Цитата koresaram
поэтому не знаю на каком языке это можно сделать. По идее хоть на вбс лишь бы работало. »

Дык, написать можно на том языке, который в наличии на целевом компьютере, если нет желания позаниматься установкой среды в которой будет выполняться написанное. Есть там powershell? Вот от этой печки и надо плясать...

Busla 28-08-2018 14:49 2828947

кассы в магазинах - это легко может быть какой-нибудь Embedded XP

Iska 28-08-2018 15:13 2828950

koresaram, мне не нравится Ваш подход в принципе. Предлагаю свой:
Скрытый текст
Код:

Option Explicit

Const strPath2Programm = "C:\Program Files\VideoLAN\VLC\vlc.exe"


Dim objFSO
Dim objWshShell

Dim lngProcessID
Dim intRetValue


Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
        If objFSO.FileExists(strPath2Programm) Then
                Do
                        If .Get("Win32_Process").Create(strPath2Programm, objFSO.GetParentFolderName(strPath2Programm), Nothing, lngProcessID) = 0 Then
                                WScript.Sleep 1000
                                objWshShell.AppActivate lngProcessID
                               
                                .ExecNotificationQuery( _
                                        "SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE " & _
                                        "TargetInstance ISA 'Win32_Process' AND " & _
                                        "TargetInstance.ProcessID = '" & CStr(lngProcessID) & "'").NextEvent
                               
                                intRetValue = objWshShell.Popup("Процесс [" & strPath2Programm & "] был завершён." & vbLf & vbLf & "Запустить процесс снова?", 10, "Повторный запуск процесса", vbYesNo + vbQuestion)
                               
                                Select Case intRetValue
                                        Case -1, 6 ' Ничего не было нажато, Нажата кнопка «Да»
                                                ' Nothing to do
                                        Case Else
                                                Exit Do
                                End Select
                        Else
                                WScript.Echo "Не удалось запустить процесс [" & strPath2Programm & "]."
                                WScript.Quit 2
                        End If
                Loop
        Else
                WScript.Echo "Не удалось найти файл [" & strPath2Programm & "]."
                WScript.Quit 1
        End If
End With

Set objWshShell = Nothing
Set objFSO      = Nothing

WScript.Quit 0


Будут вопросы по коду — задавайте.

YuS_2 28-08-2018 15:15 2828951

Цитата:

Цитата Busla
легко может быть »

о чем и речь, собственно:
Цитата:

Продукты WinRM 2.0 и PowerShell 2.0 можно установить на компьютерах со следующими операционными системами:
Windows Server 2008 с пакетом обновления 1 (SP1);
Windows Server 2008 с пакетом обновления 2 (SP2);
Windows Server 2003 с пакетом обновления 2 (SP2);
Windows Vista с пакетом обновления 2 (SP2);
Windows Vista с пакетом обновления 1 (SP1);
Windows XP с пакетом обновления 3 (SP3);
Windows PowerShell 2.0 можно установить в следующих поддерживаемых операционных системах:
Windows Embedded Standard 2009
Windows PowerShell 2.0 для Windows Embedded Standard 2009 можно загрузить с MyOEM. Макрокомпонент также доступен с MyOEM.
Windows Embedded POSReady 2009;
Windows PowerShell 2.0 для Windows Embedded POSReady 2009 можно загрузить с MyOEM.

Для работы Windows PowerShell 2.0 требуется среда CLR версии 2.0. Командлеты, разработанные для Windows PowerShell 2.0, должны быть скомпилированы для среды CLR версии 2.0. Среда CLR 2.0 включена в версии Microsoft .NET 2.0, 3.0 или 3.5 с пакетом обновления 1.

koresaram 28-08-2018 16:38 2828968

Цитата:

Цитата Busla
кассы в магазинах - это легко может быть какой-нибудь Embedded XP »

Цитата:

Цитата YuS_2
Дык, написать можно на том языке, который в наличии на целевом компьютере, если нет желания позаниматься установкой среды в которой будет выполняться написанное. Есть там powershell? Вот от этой печки и надо плясать... »

там разные. есть винХП есть вин8 есть вин10
но указанный в теме код (вбскрипт) работает на всех. что такое пауершелл я хз )

koresaram 28-08-2018 17:16 2828979

Что-то идет не так )

https://clip2net.com/s/3WklZYF картинка ссылка на климптунет

я скопировал код, сохранил его как frontolstart.vbs закачал на кассу и вырубил фронтол. exe (пусть к программе в скрипте поменял с vlc на frontol). Прошло 15 минут - ничего не происходит. Как узнать "подходит ли скрипт под ту среду, которая стоит на кассе"? я не программист, поэтому, надеюсь, понятно, что я хотел сказать )

Iska 28-08-2018 17:23 2828981

Цитата:

Цитата koresaram
что такое пауершелл я хз »

PowerShell — cкриптовый язык, работающий в консоли (собственной), базирующийся на платформе Microsoft .Net, пришёл на замену пакетным файлам и WSH, поддерживает Automation (где-то лучше, где хуже, нежели WSH) и даёт, естественно, доступ ко всем классам .Net, при желании можно пользовать низкоуровневые (ну, относительно низкоуровневые :)) вставки на C#.

PowerShell — Википедия.


Цитата:

Цитата koresaram
я скопировал код, сохранил его как frontolstart.vbs закачал на кассу и вырубил фронтол. exe (пусть к программе в скрипте поменял с vlc на frontol). Прошло 15 минут - ничего не происходит. »

Для начала стоит запустить frontolstart.vbs, а затем поменять запуск frontol.exe (или что там у Вас) на запуск frontolstart.vbs.

koresaram 28-08-2018 17:34 2828984

Цитата:

Цитата Iska
Для начала стоит запустить frontolstart.vbs, а затем поменять запуск frontol.exe (или что там у Вас) на запуск frontolstart.vbs. »

то есть я правильно понимаю, что в нашем случае наша вбс будет типа оболочкой вместо винды?

сейчас в настройках самой программы фронтол (это и есть кассовая программа) есть 2 варианта - ос (винда) и фронтол (вместо ос). Туда впихнуть наш вбс не получится я так понимаю. Собственно поэтому я излагал свой вариант - скрипт, чекающий наличие фронтол.екзе и, при его остуствии (вылетел фронтол), предлагающий его запустить .

Iska 28-08-2018 18:18 2828988

Цитата:

Цитата koresaram
то есть я правильно понимаю, что в нашем случае наша вбс будет типа оболочкой вместо винды? »

Неа. Всё, что скрипт делает — сам запускает искомый исполняемый файл. А уж будет или нет оболочкой — это настраивается вовне его.

Цитата:

Цитата koresaram
сейчас в настройках самой программы фронтол (это и есть кассовая программа) есть 2 варианта - ос (винда) и фронтол (вместо ос). »

Смотрели — как именно реализовано «фронтол (вместо ос)»? Подменой стандартного shell'а (Проводника) в реестре? Или каким-то иным особо извращённым хитрым способом?

Цитата:

Цитата koresaram
Туда впихнуть наш вбс не получится я так понимаю. »

Туда — куда?

«ос (винда)» — просто подменяете ярлык на запуск фронтол ярлыком на запуск скрипта. Если ярлык в Автозагрузке — подменяете там. Если путь в автозапуске реестра — подменяете в реестре.

«фронтол (вместо ос)» — открываем оснастку групповой политики, задаём в качестве оболочки пользовательского интерфейса (Custom user interface) наш скрипт в виде:
Код:

"c:\Windows\System32\wscript.exe" "C:\Мои проекты\0190\0001.vbs"
Скрытый текст



и пользуемся. Естественно, желательно будет добавить код для выхода из системы (или завершения работы системы) при завершении работы скрипта, дабы люди не терялись при пустом экране. Есть домен — ещё проще, всё делаем в одном месте, есть разделение по OU, фильтрация, предпочтения групповой политики и т.п., назначаем только тем, кому надо. Если домена нет, но ОС от Vista и выше — используем множественную групповую политику (Использование множественной локальной групповой политики), не гребя под одну планку пользователей и администраторов машины. В крайнем случае тупо подгружаем куст реестра потребного пользователя, импортируем туда файл реестра с данной политикой, выгружаем куст реестра.

koresaram 28-08-2018 19:18 2829016

Iska,
тут блин фиг знает как реализовано (
в настройках этого фронтола есть галочка )) "Запускать фронтол вместо ОС" - и все. То есть по идее смотреть реестр на автозагрузку надо.

Но. Фишка в чем. Наши "сисадмины" говорят, что подумают как это реализовать ). Думают они уже месяц ) Вот тот код, который я в теме приводил, (мне его подруга написала минут за 5) - если на него сделать ярлык и запихать в "С-Пользователи-Ссылки" - то появляется ярлык вместо избранных ссылок в "Мой компьютер". На него можно нажать и все срабатывает. При этом этот скрипт (приведенный в теме) сисадмины раскидать смогли на все машины, а вот ярлык на этот вбс раскидать на все компы в "С-Пользователи-Ссылки" почему-то нет. Хотя по идее это такой же файл.

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

Iska 28-08-2018 19:25 2829017

Цитата:

Цитата koresaram
в настройках этого фронтола есть галочка )) "Запускать фронтол вместо ОС" - и все. То есть по идее смотреть реестр на автозагрузку надо. »

Или использовать Process Monitor. Я, вот, лично не сильно удивлюсь, если там будет тупо подменяться HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell :o .

Цитата:

Цитата koresaram
а вот ярлык на этот вбс раскидать на все компы в "С-Пользователи-Ссылки" почему-то нет. Хотя по идее это такой же файл. »

Файл-то ярлыка такой же, но кроме ярлыка нужно «раскидать» ещё и сам скрипт, чую — в этом дело :).

Домен у Вас есть?

koresaram 28-08-2018 19:31 2829020

домена наверное нет (это большая локалка. То есть есть айпишники каждой кассы (где-то) :)
сам скрипт раскидан. на всех кассах он есть.
но конкретно ярлык на каждую кассу почему-то не получилось у них ( хотя никаких прав доступа и прочих заморочек там нет (руками я могу зайти в любую кассу - сделать ярлык на этот скрипт и копирнуть его в С/Пользователи/Ссылки и пользователь его начинает видеть и может нажимать.
P>S> если я делаю ярлык на скрипт и копирую его (к примеру) себе на свой комп, то путь к ярлыку меняется на тот,где я положил у себя на компе файл. Может так проще будет - как в ярлыке задать абсолютный путь чтобы ярлык всегда ссылался на D://files/frontol.vbs ? Вне зависимости от того, где лежит сам файл frontol.vbs

Iska 28-08-2018 19:46 2829022

Цитата:

Цитата koresaram
домена наверное нет (это большая локалка. То есть есть айпишники каждой кассы (где-то) »

Жаль.

Цитата:

Цитата koresaram
P>S> если я делаю ярлык на скрипт и копирую его (к примеру) себе на свой комп, то путь к ярлыку меняется на тот,где я положил у себя на компе файл. »

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

Я бы сделал проще — добавил путь типа:
Код:

"c:\Windows\System32\wscript.exe" "C:\Мои проекты\0190\0001.vbs"
в раздел реестра, отвечающий за автозагрузку, каждой машины, либо в общий раздел автозагрузки, либо в раздел автозагрузки пользователя. Мне сложно сказать, как именно для Вас будет проще сделать.

YuS_2 28-08-2018 20:23 2829026

Цитата:

Цитата koresaram
там разные. есть винХП есть вин8 есть вин10 »

Возможно, на XP отсутствует, но это поправимо...
Цитата:

Цитата koresaram
что такое пауершелл я хз »

Ну, например, это:
script.ps1
Код:

add-type -assembly system.windows.forms
$process = 'notepad'
$start = {c:\windows\notepad.exe}

do {
if (!($p = ps $process -ea 0)){
        &$start
        $p = ps $process
}
$btn = [windows.forms.messageboxbuttons]::yesno
$t1 = [Windows.Forms.MessageBoxIcon]::Question
$t2 = [Windows.Forms.MessageBoxDefaultButton]::Button1
$top = [Windows.Forms.MessageBoxOptions]::ServiceNotification # .topmost = $true

wait-process $p.id
$res = [windows.forms.messagebox]::show($process, "Запускаем файл?",$btn,$t1,$t2,$top)
} while ($res -ne 'No')

запустить можно так:
run.bat
Код:

@echo off
start "" powershell -ex bypass -w hidden -f .\script.ps1

т.к. messagebox - плохо настраиваемая форма (вывести на передний план я не смог, знаний, наверное, маловато), но можно свою форму наваять, примерно так:
script.ps1
Код:

add-type -assembly system.windows.forms
$process = 'notepad'
$start = {c:\windows\notepad.exe}

do {
if (!($p = ps $process -ea 0)){
        &$start
        $p = ps $process
}
$form = new-object windows.forms.form
$form.autosize = $true
$form.autosizemode = [windows.forms.autosizemode]::growandshrink
$form.formborderstyle = [windows.forms.formborderstyle]::fixedtoolwindow
$form.controlbox = $false
$form.sizegripstyle = [windows.forms.sizegripstyle]::hide
$form.text = 'Запустить' + ' ' + $process + '?'
$form.showintaskbar = $false
$form.topmost = $true
$form.startposition = 'CenterScreen'


$btnyes = new-object windows.forms.button
$btnyes.text = 'Да'
$btnyes.location = new-object system.drawing.point(3,10)
$btnyes.dialogresult = [windows.forms.dialogresult]::ok
$form.controls.add($btnyes)

$btnno = new-object windows.forms.button
$btnno.text = 'Нет'
$btnno.location = new-object system.drawing.point(110,10)
$btnno.dialogresult = [windows.forms.dialogresult]::no
$form.controls.add($btnno)

wait-process $p.id
$res = $form.showdialog()
} while ($res -ne 'No')


koresaram 28-08-2018 21:09 2829033

опаньки! еще нюанс вариант появился
а как добавить вызов этого скрипта в другой скрипт на вбс, который стоит в планировщике?
на кассах в планировщике есть скрипт 1.vbs который выполняется раз в минуту. Туда в него же можно включить запуск нашего скрипта?

Iska 28-08-2018 21:24 2829036

Цитата:

Цитата YuS_2
powershell -ex bypass -w hidden -f .\script.ps1 »

В гробу я видал такую реализацию сокрытия — будучи запущен из-под Far Manager, он, ничтоже сумняшеся, нахрен скрыл его консоль :). С концами.


Цитата:

Цитата YuS_2
(вывести на передний план я не смог, »

А если так:
Код:

$res = [Windows.Forms.MessageBox]::Show($process, "Запускаем файл?", $btn, [Windows.Forms.MessageBoxIcon]::Question, [Windows.Forms.MessageBoxDefaultButton]::Button1, [Windows.Forms.MessageBoxOptions]::ServiceNotification)
?

Самым правильным, конечно, было бы использование перегрузки метода с использованием первым параметром следующего:
Цитата:

owner
IWin32Window

An implementation of IWin32Window that will own the modal dialog box.
но я не знаю, допустимо ли в качестве IWin32Window использовать десктоп, и если допустимо — то как именно допустимо.

Цитата:

Цитата koresaram
на кассах в планировщике есть скрипт 1.vbs который выполняется раз в минуту. Туда в него же можно включить запуск нашего скрипта? »

Зачем? Не нужно.

YuS_2 28-08-2018 21:47 2829039

Цитата:

Цитата Iska
В гробу я видал такую реализацию сокрытия — будучи запущен из-под Far Manager, он, ничтоже сумняшеся, нахрен скрыл его консоль »

:)
Дык, это ведь не powershell виноват в том, что консоль far-а имеет свое, особое мнение и батники с powershell-ом запускает прямо в ней... хотя, так работает любая консоль, такшта и фар тут тоже, особо не виноват... :)
Но, всё же, это правильно, имхо, т.к. целью, как раз, было скрыть консоль, чтобы глаза не мозолила.
Ну и в крайнем случае, можно ведь powershell в отдельном окне запускать, через start...
Цитата:

Цитата Iska
А если так: »

О, спасибо!
Оказывается есть вариант... я-то потыкал гугль, но на глаза не попалось ничего аналогичного, а усиленно рыть не стал.

Iska 28-08-2018 21:56 2829042

Цитата:

Цитата YuS_2
Дык, это ведь не powershell виноват в том, что консоль far-а имеет свое, особое мнение и батники с powershell-ом запускает прямо в ней... хотя, так работает любая консоль, такшта и фар тут тоже, особо не виноват...
Но, всё же, это правильно, имхо, т.к. целью, как раз, было скрыть консоль, чтобы глаза не мозолила. »

Проблема в том, что по завершении процесса powershell.exe последний не восстанавливает исходное состояние окна консоли.

YuS_2 28-08-2018 22:36 2829052

Цитата:

Цитата Iska
Проблема в том, что по завершении процесса powershell.exe последний не восстанавливает исходное состояние окна консоли. »

Кстати, откопал, среди хлама, ватчдог слежения за каталогом, который когда-то делал... вот ведь память старческая моя, там ведь есть messagebox аналогичный, с опциями [Windows.Forms.MessageBoxOptions]::ServiceNotification... :)
И там же есть запуск скрытых консолей powershell и он там именно через батник с командами start "", так что вполне себе вариант, т.к. консоль из которой происходит запуск, остается нетронутой. И на всякий случай, там же, есть скрипт прибития скрытых консолей:
Код:

$p = get-wmiobject win32_process -filter "name='powershell.exe'"|%{if($_.commandline -match 'hid'){$_.processid}}
kill -id $p


DJ Mogarych 30-08-2018 11:33 2829285

Какой ужас.
Извините за оффтоп, но не пытались ли разобраться с тем, почему вообще программа вылетает?
Зачем вообще нужно это взаимодействие с пользователем и запуск руками чего бы то ни было, если нужно, чтобы программа всегда работала?


Время: 17:02.

Время: 17:02.
© OSzone.net 2001-