| 
| 
 | Вопрос # 3 163/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!Пытаюсь создать ярлык своей программы в папке автозагрузки.
 В папке в программой всё норм создаётся и удаляется. Но в папке автозагруки только создаётся, удаляться не хочет.
 Приложение:Переключить в обычный режим private    procedure CreateLink(const PathObj, PathLink, Desc, Param: string);  procedure TForm1.CreateLink(const PathObj, PathLink, Desc, Param: string);varIObject: IUnknown;SLink: IShellLink;PFile: IPersistFile;beginIObject := CreateComObject(CLSID_ShellLink);SLink := IObject as IShellLink;PFile := IObject as IPersistFile;with SLink dobeginSetArguments(PChar(Param));SetDescription(PChar(Desc));SetPath(PChar(PathObj));end;PFile.Save(PWChar(WideString(PathLink)), FALSE);end;  procedure TForm1.Button1Click(Sender: TObject);varrun: string;begin ......CreateLink(Application.ExeName,run+'start.lnk','','');......DeleteFile(run+'start.lnk');end;
Примечание #1 (9 сентября 2009, 14:24): В приложении опечатка пути. Он имеет такой вид:run := 'C:\Documents and Settings\All Users\Главное меню\Программы\Автозагрузка\';
 
 
|  |   Вопрос задал: scream (статус: Посетитель)Вопрос отправлен: 9 сентября 2009, 14:21
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: min@y™ Ярлык - это такой же файл, и если он не удаляется, значит на то есть причины. Напиши хотя бы для отладки вот так:
 if FileExists(run+'start.lnk')
  then if DeleteFile(run+'start.lnk') 
         then ShowMessage('Файл был удалён.')
         else ShowMessage('Файл не был удалён.')
  else ShowMessage('Файл не найден.');Если будет вылетать сообщение, отличное от "Файл был удалён.", пройдись по этой ветке под дебаггером и посмотри, чему у тебя равен аргумент функции run+'start.lnk'.
 А вообще, намного легче засунуть прогу в автозапуск реестра. И удалять оттуда - тоже.
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 9 сентября 2009, 14:49
 
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 9 сентября 2009, 18:07; участников в обсуждении: 2. 
|   | scream (статус: Посетитель), 9 сентября 2009, 14:25 [#1]:В примечании тоже откуда-то появилось два лишних слеша   |  
|   | Вадим К (статус: Академик), 9 сентября 2009, 14:42 [#2]:Указывать полный путь в данном случае - плохое дело. Это на Вашей машине он такой, а у соседа может быть другой. что бы понять, что там не так, добавьте две строки, где то так
 
 GetLastError;
DeleteFile(run+'start.lnk');
showMessage(inttostr(GetLastError));и запостите сюда, что выведет (там будет число) Галочка "подтверждения прочтения" - вселенское зло. |  
|   | scream (статус: Посетитель), 9 сентября 2009, 17:48 [#3]:вывело 2 |  
|   | Вадим К (статус: Академик), 9 сентября 2009, 18:02 [#4]:2 - это "Не удается найти указанный файл". И если он там все таки есть (проводником проверяли), то проверьте путь (просто добавьте ShowMessage(run+'start.lnk'); - мало чего там. Может успеваете поменять переменную run. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | scream (статус: Посетитель), 9 сентября 2009, 18:07 [#5]:Вадим К, большое спс. разобрался. Вы как всегда на высоте)) |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |