Запись в экзешник. Нужна помощь

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 11.03.2006 (Сб) 19:40

Кто скачал скажите работает у вас?

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 11.03.2006 (Сб) 19:42

tyomitch писал(а):Да запросто.
Файл лежит в папке Program Files, у пользователя нет прав админа.
Пойдёт?

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

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 11.03.2006 (Сб) 19:58

>>Файл лежит в папке Program Files, у пользователя нет прав админа.

Во-первых, тогда как ты представляешь себе изменение экзешника вообще любыми способами?
Во-вторых, функция GetTempPath нам тоже не известна?

Может, давайте тогда поставим условие: как изменить экзешник, не включая компьютер? +_+

2 CSerg
насчет анекдота.. Думаешь, будет лучше, если я создам рядом топик "как изменить экзешник, не выдвигая абсурдные требования"? +_+

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.03.2006 (Сб) 20:05

AjaxVS писал(а):>>Файл лежит в папке Program Files, у пользователя нет прав админа.
Во-первых, тогда как ты представляешь себе изменение экзешника вообще любыми способами?

Это вопрос к автору топика, а не ко мне.

AjaxVS писал(а):Во-вторых, функция GetTempPath нам тоже не известна?

Ты говорил, что всегда сможешь создавать файл в той же папке. О временной папке речи не шло.

AjaxVS писал(а):насчет анекдота.. Думаешь, будет лучше, если я создам рядом топик "как изменить экзешник, не выдвигая абсурдные требования"? +_+

Автор ставит свои условия. Если они бредовые, это дело автора. Но если ты этими условиями предлагаешь пренебречь, то какой вообще смысл в твоих ответах?
Изображение

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 11.03.2006 (Сб) 20:13

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

Но если доступ есть, тогда на самом деле что-то очень странно получается :lol: Автор поста, откликнись на вопросы, и поясни нам что там за проблемы такие с запуском > 2 exe. Интересно очень стало, а то можно тоже одну темку сделать.

А с другой стороны, хотел бы упомянуть такой момент, как GetSetting - никто не забыл про эту вещь ?? - ведь настройки окна запоминаются в самом exe :arrow: :wink:
No comments ...

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 11.03.2006 (Сб) 20:28

>>Но если ты этими условиями предлагаешь пренебречь, то какой вообще смысл в твоих ответах?

Смысл таков: высказываясь на конференции, нужно ориентироваться на решение вопроса, заданного в теме топика, если условия автора являются невыполнимыми.

Как ты думаешь, что ожидает прочесть форумчанин, заходя в топик "Запись в экзешник. Нужна помощь"? Явно не таких условий.

Вопрос по прежнему открыт: чем плох мой метод? Или мне новую тему создавать? +_+

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 11.03.2006 (Сб) 20:35

Dex писал(а):Кто скачал скажите работает у вас?

Угу работает =)
Если всё делать своими ручками, они скоро отвалятся !

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

Сообщение ANDLL » 11.03.2006 (Сб) 20:59

А с другой стороны, хотел бы упомянуть такой момент, как GetSetting - никто не забыл про эту вещь ?? - ведь настройки окна запоминаются в самом exe
не правда. Get\SaveSetting сохранаяет настройки в реестре.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 11.03.2006 (Сб) 21:18

Как прочитать именно последнюю строку из файла? Line Input читате первую. А как последнюю?

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 11.03.2006 (Сб) 22:09

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

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 11.03.2006 (Сб) 22:25

Так выкладываю обновление к своему варианту.
+Чтение теперь происходит из бинарного файла по нажатию кнопки прочитать
+Поддержка чтения нескольких строк
+Исправлено пару ошибок
-Не сохраняются пробелы в строках
Последний раз редактировалось Dex 12.03.2006 (Вс) 13:52, всего редактировалось 1 раз.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 11.03.2006 (Сб) 23:45

Как первый вариант, так и второй - программа нифига не делает =(
Ошибка №75.

Исходники открывать будем? Может, общими усилиями подправим?

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 12.03.2006 (Вс) 0:00

ANDLL писал(а):
А с другой стороны, хотел бы упомянуть такой момент, как GetSetting - никто не забыл про эту вещь ?? - ведь настройки окна запоминаются в самом exe
не правда. Get\SaveSetting сохранаяет настройки в реестре.

Ну я основывался на данные, взятые из мукулатуры по VB, что там за граматей такой писал :?

Да, хотел бы вас еще предупридить, что похоже автор не вернется на форум (смотрите его пост), так как он просил ответы ему на e-mail присылать, вряд ли мы его еще увидим :roll:

Ладно, тронемся в другую сторону. А как же Ассемблер( ну конечно его сравнивать с VB безсмыслено), но все же в Ассемблере такую фичу как дописывание, и переписывание самой себя осуществляет ведь. Главное знать начальный адресс и длину программы, а дальше дело за несложным ???
No comments ...

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 12.03.2006 (Вс) 0:09

AjaxVS распологай exe не где нидь на C:\ или D:\
а где нидь на C:\Program Files. Там просто может быть ошибка с сепараторами. Ведь у Kovu работал первый вариант. Исходники пока раскрывать ни хочу. Да и стыдно мне их раскрывать :oops: Там всё так глупо... :oops:

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 12.03.2006 (Вс) 0:10

А вообще то всё работает... у меня...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.03.2006 (Вс) 0:11

VERITAS писал(а):Ладно, тронемся в другую сторону. А как же Ассемблер( ну конечно его сравнивать с VB безсмыслено), но все же в Ассемблере такую фичу как дописывание, и переписывание самой себя осуществляет ведь. Главное знать начальный адресс и длину программы, а дальше дело за несложным ???

Ещё один слышавший звон? :-?
Изображение

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 12.03.2006 (Вс) 0:18

Плз все кто скачал говорите результат.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 12.03.2006 (Вс) 0:44

кинул WriteInMe в Program Files...
После нажатия "Записать" образуется 4 файла и прога, выдав привычную ошибку 75, закрывается..
Как и раньше..

В общем, ты прав, исходники такого нафиг никому не нужны +_+
ЗЫ. А Kovu пошутил, наверно..

Alex123
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 16.11.2005 (Ср) 7:14

Сообщение Alex123 » 12.03.2006 (Вс) 7:00

Код: Выделить всё
Dim zf1 As String, zf2 As String

Private Sub Form_Load()
Timer1.Enabled = False: Timer2.Enabled = False: Me.Visible = False
Text1.Text = "********************"
zf1 = App.Path & "\1.exe": zf2 = App.Path & "\2.exe"
Select Case Command$
    Case "": FileCopy zf1, zf2: Timer1.Enabled = True
    Case "2": Me.Visible = True
    Case "3": Timer2.Enabled = True
    Case Else
End Select
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim i%, n%, st$, s As String * 1
st = Left(Text1.Text, 20): n = &H1B64&
Open zf1 For Random As #1 Len = Len(s)
For i = 1 To Len(st): s = Mid(st, i, 1)
Put #1, n + 2 * i - 1, s
Next: Close #1
Shell zf1 & " 3", vbNormalFocus: End
End Sub

Private Sub Timer1_Timer()
Shell zf2 & " 2", vbNormalFocus: Timer1.Enabled = False: End
End Sub

Private Sub Timer2_Timer()
Kill zf2: Timer1.Enabled = False: End
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.03.2006 (Вс) 7:23

Alex123
Это к чему?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 12.03.2006 (Вс) 7:46

Ну почему у меня всё работатет? :o

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 12.03.2006 (Вс) 11:38

tyomitch писал(а):Ещё один слышавший звон? :-?

Не, я не утверждаю, я тока начал изучать ассемблер в универе, и сталкивался со следующим:
Код: Выделить всё
dseg segment
  file_name DB 'My.exe'', 0
  Fin equ $
dseg segment

cseg segment
assume cs:cseg, ds:dseg
org 100h
begin:
; открытие файла
  LEA dx, file_name
  call open_file
  jc error_file
  mov bx, ax
; чтение файла
  mov ah, 3fh
; загрузка длины файла
  mov cx, Fin-100h
  mov dx, begin
  int 21h
  call close_file
  jmp en

error_file:
  mov ah, 2
  mov dl, 7
  int 21h

en: mov ah, 4ch
  int 21h

open_file PROC
  cmp bx, 0FFFFh
  jne quit_prog
  mov ax, 3d00h
  int 21h
  mov bx, ax
  ret

quit prog: stc
  ret
  mov bx, 0FFFFh
open_file endp

close_file proc
  mov ah, 3eh
  int 21h
  ret
close_file endp

cseg segment
end bigin

; данная программа откроет сому себя, т.е. "My.exe"
; и разместится в памяти на то место, куда была только что загружена

Но я еще помню, что препод. говрил, что это можно осуществить только на ассемблере, технологию сохранения он не рассказал, дабы мы не начали писать нехорошие вещи (он конкретно намекнул про вирусы). Но по сути дела он сказал что реализовать дозапись и перезапись программы, можно запросто ! Как только узнаю как, тогда и буду говорить с точностью. Ну а пока тока предположения. :roll:

to Dex
У меня твоя программа работает, нормально. В принципе - это решение проблемы, но без исходников непонятно как ты это именно делаешь (Правильно, неправильно в зависимости от задачи автора поста). Выложи исходники что ты там сделал. Мы все посмотрим :wink:
No comments ...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.03.2006 (Вс) 11:47

2VERITAS: эти досовские трюки в Винде не работают.
Изображение

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 12.03.2006 (Вс) 12:47

AjaxVS писал(а):кинул WriteInMe в Program Files...
После нажатия "Записать" образуется 4 файла и прога, выдав привычную ошибку 75, закрывается..
Как и раньше..

В общем, ты прав, исходники такого нафиг никому не нужны +_+
ЗЫ. А Kovu пошутил, наверно..

Вот не надо говорить ерунды. Оба варианта прекрасно пашут...
У тебя наверно карма плохая ©
Если всё делать своими ручками, они скоро отвалятся !

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 12.03.2006 (Вс) 13:05

Выкладываю исходник...Тока не смейтесь :oops: Сделал как смог. Можно было организовать работу с bat файлами так проще, но я с ними не умею. + я работал с несколькими временными файлами, просто поленился выуживать всё из одного...
Вложения
WriteInMe.rar
(8.27 Кб) Скачиваний: 62

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

Сообщение alibek » 12.03.2006 (Вс) 13:20

Для временных файлов лучше используй не App.Path, а TempPath.
Lasciate ogni speranza, voi ch'entrate.

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 12.03.2006 (Вс) 13:43

alibek
Ну я так побыстрей сделал... чтоб не заморачиваться особо :)
А ввобще модифицировав мой исходник, можно сделать что нидь типа:
Исходный файл создаёт временный(один!) для инфы и один временный для бинарника, затем передаёт управление временному бинарнику и отрубается. Временный бинарник, считывает инфу из временного файла, и делает всё что там указано, а затем удаляет временный файл и передаёт управление главному, а тот удаляет временный бинарник. Аналогичным образом можно читать инфу, а не тем что я предложил в исходнике, так как если файл исходный весит многовато то лучше не делать.
Код: Выделить всё
filecopy
Как вам такой вариант? И ещё если уж работать с bat файлами, скажите что нужно прописать в него чтоб мона переименовать файл, удалить и ещё чего нить полезного... :)
Последний раз редактировалось Dex 12.03.2006 (Вс) 13:46, всего редактировалось 2 раз(а).

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 12.03.2006 (Вс) 13:43

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

2tyomitch: а почему не работают ? Просто объясни мне пожайлуста, чтобы знать в чем причина, и главным образом это защита Windows или же что-то другое ?
No comments ...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.03.2006 (Вс) 13:52

VERITAS писал(а):2tyomitch: а почему не работают ? Просто объясни мне пожайлуста, чтобы знать в чем причина, и главным образом это защита Windows или же что-то другое ?

Это особенность архитектуры Windows.
Изображение

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 12.03.2006 (Вс) 18:01

2tyomitch: а почему не работают ? Просто объясни мне пожайлуста, чтобы знать в чем причина, и главным образом это защита Windows или же что-то другое ?

Если я не ошибаюсь, копай по направлению "реальный режим" и "защитный режим" памяти..

Так что, WriteInMe только у меня ошибку выдает? =(

Пред.След.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 86

    TopList