Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5

Модерирует : ShIvADeSt

ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 4

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).

Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:09 28-06-2009 | Исправлено: psa1974, 12:00 02-02-2010
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cryogen2003
    Да я понял, к чему ты клонишь, кстати, на днях узнал, что вышла ее новая версия Unlocker 1.8.8 (не рекламы ради а для эрудиции) Но тут не все так просто - надо копать WinApi... Возможно, вешать ловушки...  
    С другой стороны, есть ограничения моего варианта. Например, после того как юзер нажал у тебя кнопочку и как итог запустился Эксель с документом:
    - юзер открыл в нем еще документы и начал их править... потом закрыл твой документ, а отсальные продолжает править... и так до конца рабочего дня...
    - юзер не закрывая эксель, закрыл твою программу...
    Возможно, придется комбинировать предложенные варианты решения.

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 16:26 28-10-2009
    Cryogen2003



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    psa1974
    Ну да, вот в этом и проблема. Об этом я уже тоже думал и понимаю что не все так хорошо, как хотелось бы. В принципе сначала была мысля создавать в директории с прогой свою директорию и просто потом ее все время зачищать, но в итоге получилась мини проблема. Прога будет валяться на сетевом ресурсе, для обычных смертных там только на чтение и запуск будут права, так что хотя бы директорию не создашь. Плюс могло бы быть, что какой-нибудь пользователь прибил ненароком файл, который сейчас хочет открыть еще один пользователь.  
    Судя по всему единственный вариант, создавать в Temp свою папку, сохранять туда файлы и при выходе из программы и при запуске ее эту папку чистить.
     
    P.S.: А так честно говоря заклебали, с одного проекта кидают на второй проект, потом на третий и так далее, то есть сейчас просто тупо нет времени, чтобы поддерживать свои основные проекты.

    ----------
    Холодильники мы

    Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 16:33 28-10-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cryogen2003
    Тут еще подумал... Не знаю, что у тебя за программа, но может имеет смысл написать простейшую службу, которая будет получать от твоей программы имена открытых файлов (например, через сообщение WM_COPYDATA) и мониторить их (как вариант - тупо периодически пытаться удалить, когда экскль закроют, файл освободится и будет успешно удален). Имхо, неплохое решение ...
     
     
    Добавлено:
    SIgor33
    регулярные выражения тебе помогут... мощная весчь! есть бесплатные реализации, например, TRegExpr, есть платные...

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 16:37 28-10-2009
    Cryogen2003



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    psa1974
    А службу как установить то с правами простого пользователя? А ставить через политики безопасности точно никто у нас не будет.

    ----------
    Холодильники мы

    Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 16:41 28-10-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cryogen2003
    А как устанавливаются отсальные проги у твоих юзеров? Зарегистрировать службу под учеткой администратора (или от его имени), а потом она будет работать под юзером system независимо от того, какая учетная запись у юзера. Единстенный нюанс (сам прошел через это): у каждого юзера свои сетевые подключения, и в общем случае у юзера system их нет. Т.е. независимо от того, есть сетевые подключения у юзера или нет, служба должна будет сама себе устанавливать сетевые подключения, мапить диски и т.д.  
     
    Да, кстати, в случае использования службы кажый юзер будет мониторить только свои временные файлы.

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 16:50 28-10-2009
    Cryogen2003



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    psa1974
    Проги никак не устанавливаются как класс, есть директория на расшаренном сетевом диске под эту прогу, в директории сама прога и инишник под программу с названием TNS сервака, логином и паролем (ну ессно в кодированном виде) и все. И по такому сценарию делаю все проги.

    ----------
    Холодильники мы

    Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 16:55 28-10-2009
    Vladkyr

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SIgor33
    Можно попробовать использовать бесплатный класс TRegExpr

    Всего записей: 26 | Зарегистр. 28-12-2006 | Отправлено: 17:01 28-10-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cryogen2003
    То все понятно - прога запускается с сети, там живет... Но когда я говорил про службу, я имел ввиду что ее надо будет зарегистрировать на каждой машине, где надо - это, конечно, минус, хотя операция элементарная...
    В общем, смотри... как хочешь... Мои идеи временно иссякли..

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 17:03 28-10-2009
    Cryogen2003



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    psa1974
    Операция элементарная, но к сожалению у нас просто в банке все через пятую точку сделано. И точно знаю, что через политику безопастности никто не будет накатывать эту службу.
    Судя по всему все сделаю через создание в temp своей директории и просто там буду переодически чистить. Но это еще ладно, какие приколы сейчас у моего напарника, который тоже самое пишет, но под вебом и php. Сегодня уже много пи-пи-пи слышал с его стороны

    ----------
    Холодильники мы

    Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 17:08 28-10-2009
    volser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cryogen2003
    Можно не службу запускать, а еще одну программу которая будет сидеть в трее и мониторить какую то папку даже после выхода из главной программы. Если все документы закрыты то она сама себя выгружает. Запускать можно не в момент запуска главной, а при первом просмотре документа.

    Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 17:18 28-10-2009
    Cryogen2003



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    volser
    Кстати хорошая идея, надо попробовать такое сделать. Спасибо. О таком чего-то не догадался.

    ----------
    Холодильники мы

    Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 17:21 28-10-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cryogen2003
    и как развитие идеи volser - можно сделать вспомогательную прогу вообще без иконки в трее и без кнопки на панели задач, если не надо взаимодействие с юзером - чтоб глаза не мозолила

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 17:34 28-10-2009
    SIgor33

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Vladkyr
    А как это потом все выделить в Richedit другим цветом

    Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 17:54 28-10-2009
    volser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SIgor33

    Код:
     
    with RichEdit1 do begin
      SelStart := 1;
      SelLength := 5;
      SelAttributes.Color := clRed;
    end;
     

    Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 18:07 28-10-2009
    klb

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Написал программку из одной строки:
    SysUtils.ExecuteProcess('/full/path/to/binary',['arg1','arg2']);
     
    Скомпилил и упаковал UPX'ом.
     
    Внимание, вопрос: насколько сложно постороннему лицу вытащить из экзешника эту самую строку:
    '/full/path/to/binary',['arg1','arg2'] ?
     
    Может есть более действенные методы защиты?
     
    PS Я не программер по профессии, просьба не пинать =)

    Всего записей: 38 | Зарегистр. 13-04-2004 | Отправлено: 00:07 29-10-2009 | Исправлено: klb, 00:11 29-10-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    klb
    Ну, для начала, в модуле SysUtils такой ф-ции нет. но это не важно. Допустим, мы напишем просто  
    ShowMessage('/full/path/to/binary');
     
    Теперь 2 момента:
    1. в неупакованом экзешнике эта строка фигурирует прямым текстом.
    2. процедура упаковки UPX'ом обратимая, и зная, что файл упакован UPX'ом (а узнать это не сложно - хотя бы тупо перебирая разные упаковщики ), каждый, кому не лень, сможет его распаковать и с этого места - смотри пункт 1.
     
    Вывод: упаковка UPX'ом никак не защищает - это всего лишь сжатие включенных в экзешник ресурсов.

    Цитата:
    Может есть более действенные методы защиты?  

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

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 01:37 29-10-2009
    klb

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    psa1974
    Ну я использовал Lazarus (оболочку для FreePascal), там эта функция описана в вики.
    А так думаю обойтись разбиванием ком. строки на несколько фрагментов и для каждого завести свою переменную. Потом использовать AProcess.CommandLine := var2+var1+var3;
    Как-то так.
    И, кстати, упаковщик не сильно поменял вид командной строки
     
     
    Добавлено:
    Уря, вопрос решен:
     

    Код:
    A character can also be specified by its character value (commonly an ASCII code), by preceding the ordinal value with the number symbol (#). For example specifying #65 would be the same as ’A’.

     

    Всего записей: 38 | Зарегистр. 13-04-2004 | Отправлено: 02:39 29-10-2009 | Исправлено: klb, 02:41 29-10-2009
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день, уважаемые знатоки.
    Не поделится ли кто опытом распараллеливания?
    Есть потоки (я предпочитаю использовать WinAPI, т.е. BeginThread).
    Запущаю поток, он вертится, чего-то считает, что-то куда-то отсылает...
    Но есть другой путь - вместо BeginThread пишем SendMessage(Сообщение...), а на приемной стороне (в процедуре обработки этого самого сообщения) пишем такой код:
     

    Код:
      ReplyMessage(0);//Сразу отсылаем ответ, что, типа, уже обработали

     
    Далее прога продолжает свою работу, а всё, что в обработчике сообщения - свою.
    Так вот, какой смысл использовать потоки, ежели намного (IMHO) удобней использовать приведенный алгоритм? Либо я чего-то не знаю
    Поделитесь, пожалуйста.

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 08:27 29-10-2009
    SIgor33

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    volser
    Спасибо все понял

    Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 09:23 29-10-2009
    SerBUser

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, плиз - использую Indy-компонент IdTCPServer
    в обработчике onExecute такой код:

    Код:
     
    procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
    var
     s:string;
    begin
     s:=AContext.Connection.IOHandler.ReadLn;
     if s='aa' then
      AContext.Connection.IOHandler.WriteLn('OK')
     else
      AContext.Connection.IOHandler.WriteLn('ERR');
    end;
     

    Когда коннекчусь телнетом к указанному мной в настройках порту и ввожу текст - то почему-то он не отображается при вводе. Нажимаю Enter-получаю от сервера ответ 'OK' или 'ERR' и только после этого вводимый текст при вводе отображается? Чего в супе не хватает?

    Всего записей: 123 | Зарегистр. 31-08-2009 | Отправлено: 10:15 29-10-2009 | Исправлено: SerBUser, 10:16 29-10-2009
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5
    ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru