Запуск файла определенным приложением.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by shadowrun, 24 May 2011.

  1. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    Имеется рабочий ехе файл, нужно, чтобы он запускался только определенным приложением и никак иначе. Например при клике должен выдавать месагу: "для запуска используйте приложение...". Как реализовать? Желательно на Делфи.
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    1) Получаешь список процессов (CreateToolhelp32Snapshot)
    2) получаешь свой PID (GetCurrentProcessId )
    3) в списке процессов ищешь свой процесс по PID'у (th32ProcessID) (Process32First + Process32Next)
    4) в структуре описание твоего процесса берешь PID родителя (th32ParentProcessID)
    5) Ищешь PID родителя в списке процессов и потом сравниваешь его имя с эталонным. Если не то, значит ошибку орать
     
    #2 slesh, 25 May 2011
    Last edited: 25 May 2011
  3. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    ехе файл, который нужно запускать, является исполняемым файлом рабочей программы. Как в него вшить код? Мб есть какие-то проги? Ассемблер и всё что с ним связано - не вариант.
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Если нет исходников, то

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

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

    так что проще первое чем второе.
     
    1 person likes this.
  5. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    Спасибо за совет. Попробую реализовать 1 способом.
     
  6. kolored

    kolored New Member

    Joined:
    16 Sep 2009
    Messages:
    18
    Likes Received:
    1
    Reputations:
    0
    Изменить расширение файла на неизвестное винде (например .x9r).
    Привязать это расширение к своей проге на дельфи.
    Своей прогой переименовывать расширение и запускать.
     
  7. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 kolored в консоле можно вбить текст start имя_проги.x9r и всё запустится нормально.
    да и в любой другой проге можно подобное сделать, а тут как я понял нужно проверить имя запускающего.
     
  8. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,284
    Reputations:
    327
    AppLocker юзай если винда 7.
    а вообще дайфайл я те его пропатчу