Запуск программы не извлекая её из ресурсов др. программы.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Запуск программы не извлекая её из ресурсов др. программы.

Сообщение Хакер » 25.01.2006 (Ср) 13:31

В общем, объясню проблему. Т.к. проект серьёзный, пишется крутая игра, а у крутой игры всегда должны быть свои форматы всех игровых ресурсов и собственные редакторы для них, редакторы, не все, но несколько уже создано. Так вот вместе с Game.exe рядом лежит Texture_Ed.exe, Shader_Ed.exe и тд. Пока всё устраивает, но потом когда проект будет закончен (если это будет) не очень то хочется чтобы у кого-нибудь была возможность стянуть какую-нибудь текстурку или звук.

Я решил затолкать эти Ed'ы в ресурсы, потом, когда нужно будет запустить какой-либо редактор, нужно будет в консоли написав g_sound_editor(). Т.е. EbExecuteLine то что в консоли, т.к. эта функция в обычном модуле, она вызовется, потом LoadResData и в файл всё что там было, а потом ShellExecute это файл, а когда процесс закроют Kill этот файл.

А теперь вопрос: А можно ли запустить программу из bin-ресурса, не извлекая его в файл и не запуская как EXE, т.е. как то записав его в память и потом с помощью CallWindowProc запустить. Или же мне лучше все редакторы встроить в Game.exe, т.е. вставить проект редактора в проект игры, просто перенести форму модули, модули классов из ред-проектов в главный проект.

Возможно это вопрос из темы "Как прочитать файл, не открывая его", но что делать, на ошибках учатся...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Запуск программы не извлекая её из ресурсов др. программ

Сообщение alibek » 25.01.2006 (Ср) 13:34

Хакер писал(а):EbExecuteLine

Ты в курсе, что эта функция не работает в компилированном файле?
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 25.01.2006 (Ср) 13:44

Ладно признаюсь, я использую msscript.ocx, добавляю объект типа clsFuncTran, который вызывает функции из модуля. Так все скрипты АИ, обработка событий элементов GUI, сценарии поведения объектов и др. все хранится в внешних файлах и запакованно в специальный файл, который имеет формат модифицированного PAK-файла.

Но от этого суть не меняется. Просто сейчас нужно писать очередной редактор и я не знаю делать его отдельно или запихать в проект...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 25.01.2006 (Ср) 14:38

Теоритически наверное возможно:

нужно распаковать ресурс прямо в память так же, как это делает упаковщик или как системный загрузчик (kernel.dll который). Но вот практически...
А я все практикую лечение травами...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 25.01.2006 (Ср) 15:30

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


А смысл запихивать его в проект? Так и так юзер запустить его сможет (для этого он и сделан. Если хочешь то можешь сделать в нем ghbvbnbdye. проверку наличия некоторых файлов основной программы - чтобы без них просто не работал. Вполне достаточно, IMHO.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 25.01.2006 (Ср) 15:55

Я хочу чтобы кто попало не ковырялся в ресурсах игры. Чтобы только дизайнеры и трепальщики (те кто озвучивают игру) и только те кто знает это конс. команду могли открыть редактор.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 25.01.2006 (Ср) 16:39

Это все старые песни о главном - захотят, так расковыряют и без редатора.

Если редакторы так или иначе таскаются с собой, то почему бы их функционал не перенести в ту же game.exe?
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 25.01.2006 (Ср) 16:49

Если редакторы так или иначе таскаются с собой, то почему бы их функционал не перенести в ту же game.exe?


А я это и хочу сделать... Только вопрос - как? Перенести исх. код или скомпилированный код.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 25.01.2006 (Ср) 16:55

Хакер
А ты это... когда конс команда его на диск распаковывай. А как самоё сибя убить ANDLL в статье расписал...
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 25.01.2006 (Ср) 17:39

Antonariy писал(а):Если редакторы так или иначе таскаются с собой, то почему бы их функционал не перенести в ту же game.exe?


А смысл? Чтобы был один exe-шник в гиг величиной? И только?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 25.01.2006 (Ср) 17:43

keks-n писал(а):Хакер
А ты это... когда конс команда его на диск распаковывай. А как самоё сибя убить ANDLL в статье расписал...


А у меня так и сделано, а убиваю я CMD - файлом как Гайдар в факах писал.

Andrey Fedorov

А ты представь себе что рядом с проектом лежит
AI_Script_Editor
GUI_Editor
Shader_Master
ScriptShader_Editor
Magic_Texture_Master
Sound_Editor
Level_Editor
Model_Master
SLS_Modeller

Распространять игру с этими файлами всё равно, что распространять ещё в виде исходников. Особенно это относится к AI_Script_Editor.

С Sound_Editor всякий новичок попытается стянуть звук зврыва или выстрела, ведь у него нет крутых программ для звукообработки, мало навыков, нет дорогостоящих микрофонов и ещё есть лень. Чего ему стоит стянуть...

Тем не менее эти редакторы должны работать. Но перед тем как с ними работать человек прочтёт соответствующую документацию, откуда и узнает консольные команды, которые запускаю редакторы.
----------------
Что никто не знает как сделать запуск из ресурсов?
Нет, некоторые знают, но молчат, молчат и может быть хотят написать RTFM, но им это тоже не хочется делять, пусть этот Хакер сидит и сам разбирается, чё мы ему должны помогать, ему ведь там делать нефиг, пусть сидит. Они не знают что на хакера возложена работа, которая в нормальных компаниях приходится на восьмерых программистов. Ну ну...
Последний раз редактировалось Хакер 25.01.2006 (Ср) 18:11, всего редактировалось 1 раз.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 25.01.2006 (Ср) 17:55

Andrey Fedorov, а что, .dll уже отменили?
Последний раз редактировалось Antonariy 25.01.2006 (Ср) 17:58, всего редактировалось 1 раз.
Лучший способ понять что-то самому — объяснить это другому.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 25.01.2006 (Ср) 17:58

Antonariy писал(а):Andrey Fedorov, а что, .dll уже отменили?


А это уже не ко мне. Главное - какой смысл? Ну не хочешь чтобы утилитка работала без основной программы - просто проверяй ее наличие. Делать только из-за этого dll-ки или пихать все в один exe-шник просто глупо.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 25.01.2006 (Ср) 18:15

Нифига себе вы тут напостили пока я свой пост дописать решил.

Обращаюсь ко всем, понимаете я не хочу делать так, чтобы редактор не работал без гл. файла. Если кто-то смотрел DOOM3 (его ресурсы), то наверное обратил внимание, что все редакторы находятся примо в exeшнике дума. Кстати про dll идея хорошая, чего то я сам не допёр... Но мне всё равно хочется сделать как я изначально придумал.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 25.01.2006 (Ср) 19:56

Хакер
А формат ресурсов какой? :roll:
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 25.01.2006 (Ср) 20:48

В смысле формат ресурсов. Формат BINARY DATA. В ВБ он называется CUSTOM. Или ты про формат файла спрашиваешь. Он примерно такой

Код: Выделить всё
Сигнатура
Кол-во источников
Кол-во файлов
офсет файлов
============================
Источник.Имя
Источник.ЗвуковойКонус.ВнешУгол
Источник.ЗвуковойКонус.ВнутрУгол
Источник.Эффекты
Источник.Позиция
Источник.ЗвуковойКонус.Направление
Источник.ТипБуфера
Источник.ИмяФайлаСоЗвуком
-------------------------
Источник.Имя
Источник.ЗвуковойКонус.ВнешУгол
Источник.ЗвуковойКонус.ВнутрУгол
Источник.Эффекты
Источник.Позиция
Источник.ЗвуковойКонус.Направление
Источник.ТипБуфера
Источник.ИмяФайлаСоЗвуком
-------------------------
~ ~ ~ ~ ~
Источник.Имя
Источник.ЗвуковойКонус.ВнешУгол
Источник.ЗвуковойКонус.ВнутрУгол
Источник.Эффекты
Источник.Позиция
Источник.ЗвуковойКонус.Направление
Источник.ТипБуфера
Источник.ИмяФайлаСоЗвуком
-------------------------
=====================================
Последовательно записанные данные файлов
XXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
=====================================
Имя файла
Офсет файл
Длина Фалйа
-------------
Имя файла
Офсет файл
Длина Фалйа
-------------
~ ~ ~ ~ ~ ~ ~
------------
Имя файла
Офсет файл
Длина Фалйа
-------------
====================================== EOF
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 25.01.2006 (Ср) 21:26

Непойму, что нужно? Что бы нельзя было запустить эти экзешники без основной проги? а что мешает установить какую-нибудь процедуру проверки подлинности, и скажем когда запускается редактор он провиряет, лежит ли с ним в каталоге файл game.exe, и если лежит, то тот ли это файл, что нужно?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 25.01.2006 (Ср) 22:53

ANDLL писал(а):Непойму, что нужно? Что бы нельзя было запустить эти экзешники без основной проги? а что мешает установить какую-нибудь процедуру проверки подлинности, и скажем когда запускается редактор он провиряет, лежит ли с ним в каталоге файл game.exe, и если лежит, то тот ли это файл, что нужно?


Нет, просто некоторые утилиты используют те же классы, что и игра, т.е. они являются частью игры и запускаются из консоли, некоторые используют несколько модифицированные классы, например у класса загрузчика текстур процедура LoadTexturePack имеет ещё один агрумент - ссылку на ProgressBar, который показывает прогресс загрузки. И такие выходы как создать 2 процедуры (с и без агрум.) или 2 класса здесь не подходят - слишком много будет лишнего кода. Некоторые утилиты вообще никак не связанны с игрой.

Так вот нужно сделать так, чтобы всё запускалось из консоли. Поэтому я думаю что лучше добавить exe'шники этих утилит в ресурсы Game.exe а при необходимости:

Код: Выделить всё

hFile=FreeFile
Open "temprog.exe" for binary as #hFile
Put #hFile, 1, LoadResData(G_RES_SNDEDITOR_ID, 10)
Close #hFile
Shell "temprog.exe"


Но тогда файл приходится удалять, это в принципе небольшая проблема, но хочется всё сделать не записывая программу в файл. А сразу в память (только не уверен возможно ли так сделать). Предполагаю что CreateProcess, WriteProcessMemory, CallWindowProc, хотя могу и ошибаться...[/syntax]
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 119

    TopList