Innosetup под правами пользователя
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Innosetup под правами пользователя

Innosetup под правами пользователя

Ответ
Поиск в этой теме
Непрочитано 19.07.2007, 02:06 #1
Innosetup под правами пользователя
Кулик Алексей aka kpblc
Moderator
 
LISP, C# (ACAD 200[9,12,13,14])
 
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 40,431

Кто может, подскажите!
Ситуация такова: нарисован инсталлятор (innosetup + istools). Установка выполняется в Program files, по ходу дела регистрируется несколько dll (в том числе и самодельные) и ocx (сторонних производителей). Под администратором нормально работает, но... Но у меня 40 человек на попечении, и выпуск (точнее, установка) каждой новой версии превращается в сущий ад - они почти все сидят с правами "Пользователь".
Естественно, что захотелось выполнять установку под текущим пользователем, наплевав на его ограничения.
Сижу уже полторы недели, эффекту нуль.
По ходу дела нашел на vbstreets.ru файлик RegSvrEx, который позволяет зарегистрировать dll под текущим пользователем (если он, конечно, не "Гость"). Черт с ним, я согласен прописать на каждую dll и на каждый ocx в скрипте использование этого файла. Но мне надо выполнять распаковку в Program files и выполнять прочие шаманские дела с системными папками!
Поиск на ру-борде привел к http://setacl.sourceforge.net/ - но корректно запустить не удалось. В секции Files:
Код:
[Выделить все]
Source: ..\SetACL.exe; DestDir: {tmp}
Source: ..\SetACL.exe; DestDir: {tmp}; BeforeInstall: SetAdminPermissions
Source: ..\SetACL.exe; DestDir: {tmp}; AfterInstall: RestoreDefPermissions
Source: ..\..\dll\*.dll; DestDir: {app}\dll <...>
В Code:
Код:
[Выделить все]
var PermissionsResultCode: Integer;

// TExecWait = (ewNoWait, ewWaitUntilTerminated, ewWaitUntilIdle);

Procedure SetAdminPermissions();
begin
  Exec('"' + ExpandConstant('{tmp}\setacl.exe') + '"', '-on ' + ExpandConstant('{pf}') + ' -ot file -ace "p:full"', '', SW_HIDE, ewWaitUntilTerminated, PermissionsResultCode);
  Exec('"' + ExpandConstant('{tmp}\setacl.exe') + '"', '-on hklm\SOFTWARE -ot reg -actn ace -ace "n:' + ExpandConstant('{username}') + ';p:full"', '', SW_HIDE, ewWaitUntilTerminated, PermissionsResultCode);
End;

Procedure RestoreDefPermissions();
Begin
  Exec('"' + ExpandConstant('{tmp}\setacl.exe')+ '"', '-actn restore', '', SW_HIDE, ewWaitUntilTerminated, PermissionsResultCode);
End;
И вешаю эти процедуры соответственно на BeforeInstall и AfterInstall. И все равно, запись в Program files блокирована. Дальше инсталл не идет. Причем независимо от используемой версии SetACL (естественно, для 0.904 ключи и последовательность пробовал одни, для 2.0 - другие, показаны именно для 2.0).
Собственно вопросы:
- я, как всегда, хочу невозможного?
- почему не выполняется копирование файла setacl.exe? Он же по идее должен идти первым?
- если нет, то что еще надо прописывать и куда?
На крайний случай я согласен на копирование и регистрацию файлов с обязательной перезагрузкой. Но как это сделать??
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Просмотров: 3769
 
Непрочитано 19.07.2007, 08:36
#2
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


SetAcl нет необходимости использовать. В InnoSetup уже давно предусмотрены встроенные средства для работы с permissions. В его составе (в исходниках) есть компоненты и библиотеки для этого. Но для Delphi. Других такого типа бесплатных вообще нет.

В скрипте надо поиграться со свойствами Permissions на вкладке File IsTool.

Цитата:
почему не выполняется копирование файла setacl.exe?
Потому, что его и не велено копировать. Может в задачу не включен. Надо хотя бы

Код:
[Выделить все]
Source: ..\SetACL.exe; DestDir: {tmp}; Components: common
Цитата:
На крайний случай я согласен на копирование и регистрацию файлов с обязательной перезагрузкой. Но как это сделать??
А Win на это согласна? Перезагрузку можно включить на вкладке Application - Always Restart, Restart If Needed By Run.

Там же устанавливаются требуемые привилегии запускателя инсталляции. Привилегии-то можно снять, но сработает ли инсталлятор если ему будет отказано в каком-то действии.

Цитата:
Естественно, что захотелось выполнять установку под текущим пользователем, наплевав на его ограничения
Какие-то противоестественные хотения :wink: Лучше с этим не шутковать. Админам очень не нравится, когда их полномочия пытаются обойти. Это святое. Еще лучше, если любая программа устанавливается админом. Даже если могла бы простым юзером запущена.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 19.07.2007, 13:46
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


В общем, понятно. Мои желания опять нереализуемы в обозримом будущем
Честно говоря, я думал, что либо Permissions в скрипте, либо setacl дадут возможность достучаться до записи в системные папки помимо ограничений самой Windows. Не дало (не получилось, руки кривые - не важно).
Все равно спасибо за инфу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Innosetup под правами пользователя

Реклама i