|
Вопрос # 3 163/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Пытаюсь создать ярлык своей программы в папке автозагрузки.
В папке в программой всё норм создаётся и удаляется. Но в папке автозагруки только создаётся, удаляться не хочет.
Приложение: Переключить в обычный режим- private
- procedure CreateLink(const PathObj, PathLink, Desc, Param: string);
-
-
- procedure TForm1.CreateLink(const PathObj, PathLink, Desc, Param: string);
- var
- IObject: IUnknown;
- SLink: IShellLink;
- PFile: IPersistFile;
- begin
- IObject := CreateComObject(CLSID_ShellLink);
- SLink := IObject as IShellLink;
- PFile := IObject as IPersistFile;
- with SLink do
- begin
- SetArguments(PChar(Param));
- SetDescription(PChar(Desc));
- SetPath(PChar(PathObj));
- end;
- PFile.Save(PWChar(WideString(PathLink)), FALSE);
- end;
-
-
- procedure TForm1.Button1Click(Sender: TObject);
- var
- run: 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]:
Вадим К, большое спс. разобрался. Вы как всегда на высоте))
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|