ПрограммированиеФорумОбщее

потестите прогу Launcher для движка + [начиная с 4-5 страницы - епопея с правами доступа] (7 стр)

Страницы: 1 2 3 4 5 6 7
#90
15:33, 5 авг 2011

попробовал запустить расширитель прав на виртуальном win7, и не работает, просто не запускается... =(

#91
16:44, 5 авг 2011

итоги прошедшего времени:
1) на вин7 както не так работает командная строка, пока что списываю на то что это виртуалка, может урезаная... и собственно ICACLS пока тестиьт не удалось
2) если в адресе файла вписать: fopen("%%appdata%%\blablabla.txt"); оно не сработает, такой конвертер работает только в експлорере, либо с помощью дополнительных расшифровок.
3) для доступа в ApplicationData перешел на wchar_t:

SHGetSpecialFolderPathW(NULL, AppData, CSIDL_APPDATA, FALSE);//CSIDL_COMMON_APPDATA if write to AllUsers =)
  swprintf(AppData,L"%s\\Productname\\",AppData);

т.е. wchar_t юзается только для адресов в appData, ТОЛЬКО для адресов! внутри с файлами работа идет как и было, с char... а для локальных файлв - остался char.
4) думаю, что если даже заставиьт работать на вин7 ICACLS, то скорее всего (не уверен. не проверял) если вынести ее в отдельную прогу, и инсталировать из под лимитированого юзера runAs admin - то инсталятор получит права админа и заинссталит, но не факт что инсталлер передаст права админа дочерней проге (ICACLS) для расширения прав... так что этот трюк логично должен был бы обламатся.
5) посматриваю на UAC для лаунчера. это очевидный самый простой способ... но снова ж, если апдейтер получит права на скачку/затирание файлов, то не факт что он сможет передать эти права дочерней мелкой проге (типа чтобы проапдейтить лаунчер - надо еще одну прогу, которая собственно подменяет это дело...)

епопея продолжается =)

#92
16:51, 5 авг 2011

подумал о хорошем компромисе...
1) запускаем пргу с UAC. получаем нужный уровень доступа.
2) пользуясь доступом качаем нужные файлы куда надо...
3) менгяем права для папки в которой находимся, и больше уже UAC не спросит
4) поскольку п.3 выполняется вначале, то в конце исполнения лаунчера мы сможем удалить самого себя с дочерней проги. для который уже будет нужный доступ.

дальнейшие запуски не будут спрашивать доступ... =)
я нигде не ошибся?

#93
17:39, 5 авг 2011

Аврелий
> я нигде не ошибся?
Вроде нет, только вот насколько я помню дочерний процес наследует атрибуты безопасности родителя, если не указанно обратное. Т.к. если родитель имеет скажем права на выделение больших страниц, то и его наследник будет их иметь. Думаю тоже самое и с правами доступа к папкам, хотя не проверял. (опять же по аналогии с Линукс + кое что помню из соотв. статей в WinSDK)

#94
18:58, 5 авг 2011

Для Висты и выше надо покурить манифесты, например http://krez0n.org.ua/archives/318 , внутри есть ссылка ещё на статью хабра.

По поводу названий Administrator или Администратор и т.п. что-то есть, пытаюсь нагуглить.
Всё, увидел, ты через SID задаёшь

#95
21:10, 5 авг 2011

Bishop
> Вроде нет, только вот насколько я помню дочерний процес наследует атрибуты
> безопасности родителя
Аврелий
> 3) менгяем права для папки в которой находимся, и больше уже UAC не спросит
главное 1 раз доступ получить.. звучит правда както по наркомански =)) "мне тока лишь еще 1 раз!"

Jerzy
> Для Висты и выше надо покурить манифесты
а не для висты что делать?
тем более UAC надо достать из дельфи, для лаунчера, а манифесты вижу только для студии примеры.

ЗЫЫЫ, хотелось бы поделится етим лаунчером и написать к нему инструкцию че как делать + опенсурс если вдруг комуто надо... тока вот помогите его слепить.

#96
22:12, 5 авг 2011

! нашел уникальный способ запрашивать права админа... фтопку UAC =)

http://mda-delphi.blogspot.com/2009/02/vista-uac-delphi-2.html

> Есть целый ряд вещей, которые при этом проверяются, но я хотел бы отметить, единственную вещь,
> которую довольно легко реализовать и проверить – elevation диалог вызывается, если имя исполняемого
> файла или информация о его версии содержат такие строки, как, например, “settings”, “install” или “update”.

работает =)

#97
11:07, 6 авг 2011

Аврелий
> работает =)
И на XP? И на W7?
Если, наконец, взлетело, то это радует:)

#98
15:34, 8 авг 2011

итоги миновавших дней...

систему строю так:
1) Запускаю лаунчер, проверяю есть ли права админа (запись в вспомогательном файле 0 или 1)
2) если есть Full Control - работать дальше, проверять апдейты...
3) если доступа нет - запускаю вспомогательную прогу Expansion.exe runAs Admin... просит ввети пороль...
не ввели пороль - вылетает в трубу, если ввести - то оно расширяет права с помощью CACLS / ICACLS.. потом записывает флажок, что права расширены, потом запускает Launcher, который уже будет работать без ограничений.


результаты тестирования на XP / limited XP / Win7 / limited Win 7

XP
проблем нет, смущает только то, что хоть мой основной юзер на компе, с правами админа - всеравно спросит пароль админа, который я вобще то давным давно забыл, пришлось хак-прогами узнавать =)
ну собсно работает норм

limited
без рпав все ругается и порится, после того как коректно ввести пароль - все стает на свои места. проблем нет.

Win 7
не работает запуск Expansion.exe runAs Admin от лаунчера, поэтому он просто закрывается и далее ничего не происходит...
если запустиь ручками (спрашивать пороль не будет), даст доступ и далее все будет нормально роботать...

limited
творилось непойми-что... в итоге работало. но тоже не работает запуск Expansion.exe runAs Admin от лаунчера...


чего оно так все фейлит - пока не понятно, но вот сделать поддержку разных поколений виндоуза - это епик.

+была еще проблема, когда консольные приложения (это какраз Expansion.exe) под вин7 не запускались... ну это оно какбы стандартное, и для того чтобы оно работало надо доставить VS redist какого-то там года...
я решил что это не хорошо, и подумав.. "игра то запускается", че консольное не работает... взял и пихнул код с консоли в проект настроеный для движка.. вобщем запустилось и работает.

#99
20:59, 10 авг 2011

епопея продолжается...
все вышеописаное зафейлило.. все таки ядро у висто/7 и XP разное, и сделать привилегии для лимит.юзеров н всех версиях ОС не получилось по человечески....

поэтому чуток подкрутил юникод в файловую структуру движка и лаунчера, и теперь спокойно качаю апдейт-файлы в ApplicationData, оттуда и использую.. нюансов много вылезло, но работать под ХР/7 с лимит.юзера удалось!.. даже на немецком, с юникодом =)...

теперь грамотно обхожу отсутствие интернета и остановку поддержки проекта.
добавил кнопочку "report bug"
убрал возможность апдейтить апдейтер (только его exe, остальное менять можно...) думаю что будет не критично, ведь главное - апдейтить игру а не апдейтер =)

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

#100
22:13, 10 авг 2011

Аврелий
> спокойно качаю апдейт-файлы в ApplicationData, оттуда и использую
Скачал новый .exe игры, как его из ApplicationData записать в папку с игрой? Или лаунчер будет прямо из ApplicationData игру запускать?

#101
0:50, 11 авг 2011

Riddik
> Или лаунчер будет прямо из ApplicationData игру запускать?
да, и поскольку лаунчер находится в папке с игрой, то главный exe после запуска из AppData какбы станет дочерним процесом, и поэтому GetCurrentDir из него будет такой как нужно.

#102
11:08, 11 авг 2011

важная штука, облегчающая жизнь:

//SetCurrentDirectory!
#define SetAppData SetCurrentDirectoryW(AppData);
#define SetLocalDir SetCurrentDirectoryW(LocalDir);

#define UpdCheck(FileName,LoadProcedure) SetAppData if (FileExists(FileName)) {LoadProcedure; SetLocalDir} else {SetLocalDir LoadProcedure;}

используется примерно так:

UpdCheck( filename, D3DXCreateTextureFromFileA(DxDevice,filename,&Textures[group][index]) )

SetAppData / SetLocalDir - работают с wchar_t, а остальная работа с файлами локально может спокойно работать с char.

#103
14:55, 11 авг 2011

новый лаунчер...
http://www.gamedev.ru/code/forum/?id=151007

Страницы: 1 2 3 4 5 6 7
ПрограммированиеФорумОбщее

Тема в архиве.