Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.05;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.041 c
3-1134115856
Ascan
2005-12-09 11:10
2006.02.05
Программно ввести пароль в базе


2-1137835014
Marat
2006-01-21 12:16
2006.02.05
Как начать?


6-1130674624
WebSQLNeeder
2005-10-30 15:17
2006.02.05
Как выключить прокси в примере использования прокси в TWebBrowser


4-1132740004
ПЛОВ
2005-11-23 13:00
2006.02.05
Неработает AdjustWindowRect


2-1137786339
2Wish
2006-01-20 22:45
2006.02.05
Упорядочить массив