Отслеживание пользователя, скачавшего .exe
Уж не помню зачем это нужно.
Но суть в том, чтобы пользователь (зарегистрированный или анонимный), скачивающий триал вашей программы с сайта как-то учитывался. Чтобы программа "знала" откуда он пришёл (affid, referer, контекст/adsense/тизеры, seo/запрос в поисковике, др. рекламная компания).
Для этого нужно при скачивании как-то передать, скажем PHPSESSID установщику вашего софта, фактически .exe-файлу.
Вот варианты:
- Отслеживать как-то по ip-адресу, лазить в кукисы браузеров на локальном компе... Ненадёжно и малореально.
- Добавить sessid в имя скачиваемого файла, – и при установке проверить Application->ExeName | GetModuleFileName.
(Вообще, это неплохой приём, например, для портативных версий софта).<?php header("Cache-Control: private"); header("Content-Length: 123456"); header("Content-Type: application/octet-stream"); header("Expires: Sun, 23 Oct 2011 22:15:21 GMT"); header("Content-Disposition: attachment;filename=bs_637653-jnFT6TYu.exe"); - И вот, собственно, моя идея:
Как правило, даже после компиляции программы, в её бинарном виде всё-равно остаются строки с названием контролов: Label-ов/Edit-ов. Можно создать скрытый (аттрибут hiden) Edit1 и вписать туда что-то вроде: "MYPROGSESSID=_____=ENDOFSESSID" (если используете инсталлятор - то найти способ оставить метку там).
Теперь скомпилировать исполняемый файл, проверить что текст нашей строки не изменился, открыв в любом hex-редакторе (UltraEdit напр.)
Дальше идёт PHP-скрипт скачки, кот. до стандартных хидеров ещё и модифицирует .exe-файл:str_replace("MYPROGSESSID=_____=ENDOFSESSID", $_REQUEST['PHPSESSID']);
(Для ускорения процесса можно кешировать позицию этой строки в файле ($pos = stripos()), проверив дату модификации файла (filemtime(), после чего fopen(, "wb"); fseek(, $pos); fwrite();)
Собственно, этот способ не ограничивается Edit1-контролом. Вы можете попробовать добавить файл с определённой строкой-токеном в ресурсы (не представляю как это делается :lol:), добавить определённый файл картинки в инсталлятор (попросив «установить» его в %programfiles%), после чего прочитать его из уже установленной программы.
____________
Подписка на рубрику C++/Шаровара - теперь БЕСПЛАТНО! Да, купон на скидку 99.7% без НДС.
ноября 10, 2011 в 20:09
Не всегда.
Компилятор в хидер пишет чексам. Если ты поменяешь байты, то ехе уже будет не настолько кошерный ибо чексам будет неверный. После замены байтов, рекомендуется использовать editbin /release а после этого еще upx можно юниксовую версию. Тогда будет очень кошерно - как буд-то так и надо.
ноября 10, 2011 в 20:13
Добавить в ресурс строку %MY_AFFILIATE_ID% и потом str_replace
Добавить в код, если на C++ : static const szAffiliate="%MY_AFFILIATE_ID%";
И потом точно так же str_replace
ноября 10, 2011 в 20:14
Самый-самый дзеновский метод : RegHacker запускать в рантайме из пыха под wine-средой.
ноября 13, 2011 в 05:31
Может правильней использовать манифесты, вроде они остаются неизменными:
1. создать файл
my.rc2. файл
my.manifest(для WinXP напр.)<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="Microsoft.Windows.MyApp.__QWERTY__" type="win32" /> <description>__QWERTY__</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>3. Добавить ресурс
my.rcв проект – Add file to project (Shift+F11)4. И примерно так получить данные:
Можно внедрять манифест и с помощью спец. программы мелкомягких: http://msdn.microsoft.com/en-us/library/ms235591(v=vs.80).aspx
Правда подписывать приложение (или инсталлятор) всё-равно придётся каждый раз снова...
ноября 14, 2011 в 10:07
Манифест это гуд, но чем он отличается от обычного ресурса?
Кроме того, что тут есть завязка на XML который нужно парсить :)
ноября 27, 2011 в 16:49
Манифесты не должны никак меняться, сжиматься, т.к. так их читает Windows (вроде).
Ничего парсить не нужно:
ShowMessage( sXML.SubString(sXML.Pos("<description>")+13, sXML.Pos("</description>")-sXML.Pos("<description>")-13) );февраля 2, 2012 в 02:28
понятно теперь стало