Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
ВнизМожно ли сделать, чтобы программа удаляла сама себя? Найти похожие ветки
← →
Ell (2006-01-19 13:18) [0]Хочу, чтобы программа (состоит из одного exe’шника), когда истечёт срок её использования, удаляла себя с винта. Только если файл запущен, DeleteFile под Виндовс не проходит...
← →
AbrosimovA (2006-01-19 13:36) [1]
procedure DeleteSelf;
function ConvertToDos(S: string): PChar;
begin
CharToOEM(PChar(S), PChar(S));
end;
var
BatchFile: TextFile;
BatchFileName: string;
TM: Cardinal;
TempMem: PChar;
begin
BatchFileName := ExtractFilePath(ParamStr(0)) + "$$336699.bat";
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);
Writeln(BatchFile, ":try");
Writeln(BatchFile, ConvertToDos("del "" + ParamStr(0) + """));
Writeln(BatchFile, "if exist "" + ParamStr(0) + "" goto try");
Writeln(BatchFile, "del "" + BatchFileName + """);
CloseFile(BatchFile);
TM := 70;
GetMem(TempMem, TM);
GetShortPathName(pchar(BatchFileName), TempMem, TM);
BatchFileName := TempMem;
FreeMem(TempMem);
winexec(Pchar(BatchFileName), sw_hide);
halt;
end;
← →
Ell (2006-01-19 13:59) [2]Спасибо. Только, по-моему, в строчке:
Writeln(BatchFile, ConvertToDos("del "" + ParamStr(0) + """));
что-то не так, в BatchFile создавалась непонятная строка :l║B
я строку заменил наWriteln(BatchFile, "del "" + ParamStr(0) + """);
и все работает.
← →
AbrosimovA (2006-01-19 14:56) [3]
ConvertToDos(..)
для русскоязычной папки
← →
Digitman © (2006-01-19 15:06) [4]
> Можно ли
Можно.
Но не нужно.
← →
Ell (2006-01-19 15:24) [5]Digitman:
> Можно.
Спасибо ;-)
← →
Ell (2006-01-19 15:25) [6]AbrosimovA
> ConvertToDos(..) для русскоязычной папки
Тогда, может, ошибка в функции? (Я её, честно говоря, не совсем понял.)function ConvertToDos(S: string): PChar;
begin
CharToOEM(PChar(S), PChar(S));
end;
Она в бат-файле вместоdel "filename"
создавала строкуl║B
как я уже говорил.
← →
AndreyAR (2006-01-19 15:54) [7]
> function ConvertToDos(S: string): PChar;
> begin
> CharToOEM(PChar(S), PChar(S));
> end;
вот так надо:
function WinToDos(s: string): string;
var tmp:string;
begin
SetLength(tmp,length(s));
CharToOEM(PChar(s),PChar(tmp));
result:=tmp;
end;
← →
Digitman © (2006-01-19 16:05) [8]
> Ell (19.01.06 15:24) [5]
Код, фигурирующий в [1], не имеет ни малейшего отношения к теме вопроса.
← →
Ell (2006-01-19 16:16) [9]Digitman:
> Код, фигурирующий в [1], не имеет ни малейшего отношения
> к теме вопроса.
Почему же? Программа с тем кодом удаляет сама себя с винта, только функцию заменил на [7]. Это я и искал.
AndreyAR:
> вот так надо:
Да, так всё работает, благодарю.
Кстати говоря, для завершённости процедуры ещё не помешает снять атрибут "read-only" (на всякий случай, если вдруг такой появился), но с этим я разберусь...
← →
AndreyAR (2006-01-19 16:42) [10]
> Да, так всё работает, благодарю.
Нема за шо. Хотя я лично так не пишу, пользуюсь готовой функцией из RxLib.
← →
Ell (2006-01-19 16:44) [11]AndreyAR, я ещё неточность в процедуре нашёл:
WinToDos надо использовать во всех трёх случаях, чтобы с русскоязычными папками работало.
← →
Leonid Troyanovsky © (2006-01-19 16:44) [12]
> Ell (19.01.06 16:16) [9]
> > Код, фигурирующий в [1], не имеет ни малейшего отношения
> > к теме вопроса.
> Почему же? Программа с тем кодом удаляет сама себя с винта,
Если говорить точно, то программа удаляется другой программой,
т.е. командным процессором, cmd.
--
Regards, LVT.
← →
Digitman © (2006-01-19 16:48) [13]
> Ell (19.01.06 16:16) [9]
См.
> Leonid Troyanovsky © (19.01.06 16:44) [12]
Исп.файл твоей программы удаляется совершенно другой программой.
← →
Ell (2006-01-19 16:53) [14]Leonid Troyanovsky:
> Если говорить точно, то программа удаляется другой программой
Но если говорить ещё более точно, учитывая, что команду той программе удалить себя дала основная программа, то можно сказать что и она себя удалила :-) (Мы же говорим, например, что такой-то человек построил завод, хотя понимаем, что не он непосредственно кирпичи клал...) И потом, программы же всегда тоже используют внешние процедуры Виндовс.
Да и не важно это по большому счёту, какая разница, главное результат...
← →
AndreyAR (2006-01-19 16:57) [15]
> Да и не важно это по большому счёту, какая разница, главное
> результат...
Уважаемым коллегам главное поумничать, и дать понять оппоненту, что он дурак.
Вообще, действительно, делается немного не так. Если автор темы расскажет, зачем ему это, готов покопаться в старых исходниках...
← →
Ell (2006-01-19 17:09) [16]AndreyAR:
> Вообще, действительно, делается немного не так.
А в чём недостатки данного метода?
> Если автор темы расскажет, зачем ему это
Так я же в начале темы вскользь упоминал. Если надо подробнее, пожалуйста: сделал программку, отдам её некоторым людям, пусть попользуются какое-то время, оценят, потом программа себя удалит. Если им понравится и нужна будет на постоянное пользование, тогда мы с ними будем договариваться.
← →
Игорь Шевченко © (2006-01-19 17:11) [17]
> Хочу, чтобы программа (состоит из одного exe’шника), когда
> истечёт срок её использования, удаляла себя с винта. Только
> если файл запущен, DeleteFile под Виндовс не проходит...
>
Это если пользователь не догадается ее скопировать...
← →
Leonid Troyanovsky © (2006-01-19 17:15) [18]
> Ell (19.01.06 16:53) [14]
> Да и не важно это по большому счёту, какая разница, главное
> результат...
Дык, если б сначала сформулировать задачу таким образом,
то и решение можно было б найти быстрее.
Сама по себе задача о самоубийстве exe в win32 не так тривиальна,
хотя широко исследована и имеет частные решения.
Ну, а в применении к данной проблеме способ с комстрокой
может и не пройти хотя бы потому, что если ценность оной
программы велика, то она может перевесить неудобства, связанные
с отсутствием cmd.exe (да и зачем он на современных системах,
где есть vbscript & etc).
--
Regards, LVT.
← →
Digitman © (2006-01-19 17:17) [19]Удалено модератором
Примечание: Выражения выбирай
← →
Leonid Troyanovsky © (2006-01-19 17:36) [20]
> Ell (19.01.06 16:53) [14]
> Но если говорить ещё более точно, учитывая, что команду
> той программе удалить себя дала основная программа, то можно
> сказать что и она себя удалила :-)
Всего лишь попросила (исполнителя, который не является частью OS).
А не разрешает удалить исполнямый exe (если он конечно, не
на сменном носителе) именно система.
--
Regards, LVT.
← →
AndreyAR (2006-01-19 17:44) [21]Удалено модератором
← →
Ega23 © (2006-01-19 17:46) [22]Удалено модератором
← →
Digitman © (2006-01-19 17:53) [23]
> Примечание: Выражения выбирай
Стараюсь. Готов к публичным пардонам.
Но порой не получается.
Особенно - в похожем контексте.
С учетом постов автора [15] - комментарии к пардонам будут, думаю, излишними.
← →
Ell (2006-01-19 18:38) [24]Игорь Шевченко:
Это если пользователь не догадается ее скопировать...
Конечно, может догадаться, а может и не догадаться... (Особенно если пользователь ламер.) В конце концов, любую защиту можно взломать, но из этого имхо не следует отказываться от попыток защищать.
Leonid Troyanovsky, вот вы критикуете предложенный способ (может и справедливо), но всё же, ничего лучшего предложено не было...
← →
Leonid Troyanovsky © (2006-01-19 19:31) [25]
> Ell (19.01.06 18:38) [24]
> Leonid Troyanovsky, вот вы критикуете предложенный способ
> (может и справедливо), но всё же, ничего лучшего предложено
> не было...
Я критиковал всего лишь постановку задачи.
Если вариант с комстрокой устраивает, то чего искать еще чего-то.
Хотя, если уж так надо удалять работающую программу, то я бы
выбрал MoveFileEx with MOVEFILE_DELAY_UNTIL_REBOOT,
(которая, правда, не работает на 9x).
Ну, а если быть до конца откровенным, то я бы не стал так поступать
с потенциальными покупателями.
Лучше уж дать им демоверсию, с ограниченными возможностями.
--
Regards, LVT.
← →
Ell (2006-01-19 19:56) [26]Leonid Troyanovsky:
>Ну, а если быть до конца откровенным,
Это и правильно. Как сказал Леонардо, "противник, вскрывающий ваши ошибки, гораздо полезнее, чем друг, скрывающий их".
>то я бы не стал так поступать с потенциальными покупателями.
А что тут вы видите нехорошего или нечестного? Во-первых, в той программе есть предупреждение, что срок использования ограничен, во-вторых, trial-версии программ очень даже распространены, и не важно удаляется экзешник или нет, такие программы всё равно дальше не работают, а при удалённом файле хоть нет возможности поковыряться в коде, что для честного пользователя не должно иметь значения.
← →
Германн © (2006-01-20 01:23) [27]2 Ell (19.01.06 19:56) [26]
Ну если речь не идёт о "супер-пупер" программе, которую кинутся пытаться взломать все хакеры мира, то, имхо, можно попробовать посмотреть то, что оставили всем нам ребята из TurboPower Software. У них, имхо, были наработки по созданию Shareware версий программ. Свои исходники они выложили на www.sourceforge.net. Использовать "в лоб" их библиотеки компонентов в коммерческих целях, конечно не бесплатно, но использовать их идеи, имхо, можно. Конечно с респектом, например в About.
← →
Leonid Troyanovsky © (2006-01-20 08:34) [28]
> Ell (19.01.06 19:56) [26]
> всё равно дальше не работают, а при удалённом файле хоть
> нет возможности поковыряться в коде, что для честного пользователя
> не должно иметь значения.
Если возможность ковыряться в коде исключена таким образом,
то пользователя заведомо считают нечестным.
Т.е., впечатление от таких фокусов у него будет не очень.
Вполне возможно, что в нечестности он заподозрит автора.
Мало ли чего еще удалит его программа.
--
Regards, LVT.
← →
AbrosimovA (2006-01-20 11:05) [29]Иногда меня удивляет, насколько специалисты в области Дельфи на этом форуме могут долго и пространно философски рассуждать, заводя тему поста "за корягу". Автор поста уже давно уснул читая ваши рассуждения.
← →
Leonid Troyanovsky © (2006-01-20 11:15) [30]
> AbrosimovA (20.01.06 11:05) [29]
> Иногда меня удивляет, насколько специалисты в области Дельфи
> на этом форуме могут долго и пространно философски рассуждать,
> заводя тему поста "за корягу".
А собственное суждение, видимо, является исключением?
Вопрос риторический, можно не отвечать.
--
Regards, LVT.
← →
Ell (2006-01-20 14:22) [31][28] Leonid Troyanovsky:
>то пользователя заведомо считают нечестным.
Ну, если б всегда пользователи считались честными, то по окончании триал срока достаточно было бы просто попросить больше не пользоваться программой :-))) без блокирования, чтоб со всякими ключами и т.п. не париться :-)
← →
Leonid Troyanovsky © (2006-01-20 14:49) [32]
> Ell (20.01.06 14:22) [31]
> >то пользователя заведомо считают нечестным.
> Ну, если б всегда пользователи считались честными, то по
> окончании триал срока
А я и не ратую за ограничение срока работоспособности, хотя это,
IMHO, предпочтительней самоудаления.
В моем понимании демка - это то, что нужно для предварительного
знакомства. Т.е., я как пользователь уже на этом этапе могу почти
со 100% уверенностью сказать, что я не куплю.
Ну, а дальнейшие отношения зависят от того, насколько внимательно
будет прислушиваться разработчик к моим нуждам.
Т.е., как тут не раз уже говорилось - высокий уровень техподдержки
в сочетании с обновлениями версий, которые учитывают мои реальные
запросы - вот то, что защитит интересы разработчиков лучше, чем
самые пуленепробиваемые защиты.
--
Regards, LVT.
← →
Ell (2006-01-20 21:07) [33]easy come - easy go...
← →
Германн © (2006-01-21 03:40) [34]
> Ell (20.01.06 21:07) [33]
>
> easy come - easy go...
>
Плагиат, имхо.
Приводи копирайт.
← →
Ell (2006-01-21 10:41) [35]
> Германн:
> Плагиат, имхо.
Это не плагиат, это известная поговорка, найти автора (а тем более, заплатить ему за использования продукта) не представляется возможным... :-)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.012 c