Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1137662706
49 Cent
2006-01-19 12:25
2006.02.05
Запрос выдает ошибку "Недопустимое имя псевдонима"


2-1137407275
-matrix-
2006-01-16 13:27
2006.02.05
Парочка глупых вопросов


3-1133618563
JazY
2005-12-03 17:02
2006.02.05
Как добавить запись в DBGrid?


4-1133090172
_mmm
2005-11-27 14:16
2006.02.05
Нажата ли сейчас левая кнопка мыши?


1-1136642715
softmaster
2006-01-07 17:05
2006.02.05
Проблемка с DBLookupComboBoxEh





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский