powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / InnoSetup и Windows 10
22 сообщений из 22, страница 1 из 1
InnoSetup и Windows 10
    #39639539
Listratenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В WINDOWS 10, во время инсталляции, возникает проблема с созданием ярлыка на рабочем столе. (на w7 и XP всё Ок.)
Инсталляция проходит успешно, программа потом запускается как положено. Но вот ярлык на рабочем столе не создаётся. Причем в конце инсталляции - во время создания ярлыка происходит ошибка:

IPersistFile::Save: сбой; код 0x8007002. Не удаётся найти указанный файл.

Это происходит из за включенного по умолчанию запрета на внесение изменений в т.н. "Контролируемых папках с управляемым доступом". В том числе и на рабочем столе. Папка "Рабочий стол" как и некоторые другие входит по умолчанию в этот список.

Вопрос: - Как красиво обработать ошибку (если она возникнет) если винда не дает создать ярлык. Ну что бы пользователь понял о чем идет речь и почему инсталлятор ругается.

Код обычный:
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";
[Icons]
Name: "{userdesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}";Comment: "Приложение такое то"; Tasks: desktopicon

Если снимаю галочку "Создать ярлык на рабочем столе", - ошибки не возникает. Если отключаю функцию "Контролируемых папок", то ошибка так же не возникает.
Т.е. проблема ясна, теперь как обработать ошибку?! Например, что бы выскакивало сообщение "Ярлык на рабочий стол добавьте вречную".

Может пример кто кинет или куда копать...

Спасибо.
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639549
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Админские права включены?
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639551
Listratenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И манифест в екзешнике есть и права... ВСЁ
Проблема только в том - как обработать ошибку. Что бы пользователь понял.
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639554
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Listratenko,

Вот что на форуме InnoSetup есть - оно?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SOLVED:
We circumvent the errormessage with the help of registry keys.
You just have to change following registry key right before and, right after installation via OPSI script.
Change before Installation (to e.g.: C:\tmp):
HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
Change after installation back to the old entry (%USERPROFILE%\Desktop):
HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
That worked like a charm.
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639556
Listratenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Главное вот в чём: - Программа лежит в Интернете и её скачивают юзеры с 0-выми знаниями. Они не знают что такое права.
Им поставили винду и всё!
Им нужно дать подсказку - Не боись, - жми дальше!!! А то там сбоку, в винде выскакивает сообщение о небезопасных файлах и возможных вирусах.
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639557
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ListratenkoКод обычный:

А что у тебя прописано для "PrivilegesRequired"?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639559
Listratenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос только один - как обработать ошибку!
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639561
Listratenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я же написал что манифест есть. Значит и права админские.
Вопрос в только как обработать ошибку.
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639565
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ListratenkoА то там сбоку, в винде выскакивает сообщение о небезопасных файлах и возможных вирусах.

Тогда тебе нужен дважды подписанный инсталлятор.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639572
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ListratenkoЯ же написал что манифест есть.
При чем здесь манифест? У установщика или у устанавливаемой программы?
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639575
Listratenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как ошибку обработать?
Если хотите поболтать, - на другую ветку!!!
Если хотите помочь, - буду благодарен.
Вас про права никто не спрашивал. - Спрашивали как обработать ошибку?!
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639578
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ListratenkoКак ошибку обработать?

Скачать исходники InnoSetup и поправить. Другого пути для тебя - нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639585
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСкачать исходники InnoSetup и поправить. Другого пути для тебя - нет.Ну один нормальный по крайней мере есть - задать вопрос на форуме InnoSetup
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639647
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ListratenkoВопрос: - Как красиво обработать ошибку (если она возникнет) если винда не дает создать ярлык. Ну что бы пользователь понял о чем идет речь и почему инсталлятор ругается.


Навскидку: сделать check-функцию для этого ярлыка, где попытаться создать на рабочем столе пустой файл. Если удалось - возвращаем True и InnoSetup создаёт ярлык, если не удалось - показываем пользователю нужное сообщение и возвращаем False - InnoSetup не будет создавать ярлык.
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639659
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ListratenkoКак ошибку обработать?
Если хотите поболтать, - на другую ветку!!!
Если хотите помочь, - буду благодарен.
Вас про права никто не спрашивал. - Спрашивали как обработать ошибку?!с таким отношением к другим придется тебе самому решать свою проблему.
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639684
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Listratenko,

Боюсь, что, Листратенко, скоро ты будешь обрабатывать свои ошибки сам с таким подходом к обсуждению.
По теме: подписывай сетап и бинарники, если хочешь минимум проблем с UAC'ом.
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639736
Listratenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,

Спасибо за идею. - Это работает! То, что нужно!
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639782
pit_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Listratenko,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Check: IsControlledFolderAccesEnabled; 

[code]

function IsControlledFolderAccesEnabled: boolean;
var
  Val: Cardinal;
  RootKey: integer;
begin
  Result := True;

  if IsWin64 then
    RootKey := HKLM64
  else
    RootKey := HKLM32;

  if RegQueryDWordValue(RootKey, 'SOFTWARE\Microsoft\Windows Defender\Windows Defender Exploit Guard\Controlled Folder Access', 'EnableControlledFolderAccess', val) then
    Result := Val = 0;
end;
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639787
Listratenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pit_alex,
Я сделал через создание файла. Если файл создается - значит доступ есть, - можно создавать и ярлык.
Попробую Ваш метод. Потом сообщу..
Огромное спасибо.


function alowAccess(): Boolean;
var Hndl: Thandle;
SA: SECURITY_ATTRIBUTES;
begin
Result:= False;
SA.nLength:=SizeOf(SA);
SA.bInheritHandle:=True;
Hndl:= CreateFile(PChar(ExpandConstant('{userdesktop}\test.tmp')), GENERIC_READ or GENERIC_WRITE, 0, SA, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
//Если не удается создать файл, дает ошибку - файл не найден.
if Hndl>0 then
Result:= True
else
begin
Result:=False;
MsgBox('Ярлык на рабочем столе создать не удалось, т.к. запрещено операционной системой.'+#13#10+'Позже создайте его вручную.', mbInformation, MB_ok);
end;
CloseHandle(Hndl);
DeleteFile(ExpandConstant('{userdesktop}\test.tmp'));
end;
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639791
pit_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Listratenko,

при использовании
Код: pascal
1.
Check

метода, если возвращается False, то CheckBox вообще не будет отображен, поэтому что то писать пользователю не комильфо, так как пользователь еще не выбирал эту опцию. Да и создавать удалять файл без необходимости тоже не есть гуд ИМХО.
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639804
Listratenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pit_alex,

Работает. Спасибо!
С моей стороны вопросов больше нету!
...
Рейтинг: 0 / 0
InnoSetup и Windows 10
    #39639806
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pit_alex Да и создавать удалять файл без необходимости тоже не есть гуд ИМХО.
С другой стороны, папка рабочего стола может быть просто без прав записи для пользователя (да, извращение, но я такое встречал), ваш вариант этого не предусматривает.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / InnoSetup и Windows 10
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]