Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: NTFS Links - обсуждение 
Author Message
CaptainFlint



PostPosted: Sat Oct 08, 2011 21:17    Post subject: Reply with quote

MVV wrote:
Ну не так и муторно повысить привилегии.

Я говорил не про это, а про повышение уровня UAC. Запросить привилегию — это раз плюнуть, но система же не выдаст её обычному, неповышенному процессу. А главная сложность в том, что текущий процесс повысить нельзя, надо запускать новый и как-то обеспечивать взаимодействие повышенного с неповышенным.

Смотри, что получается: запросить привилегию сразу же после нажатия кнопки OK я не могу, потому что для жёстких ссылок и junction'ов она не требуется (а каждый раз выдавать UAC-окно, независимо от того, реально ли нужно повышение, — это не комильфо). Таким образом, я должен сделать это, только если пользователь захотел создавать именно симлинки. А определить эту ситуацию я смогу лишь на этапе окончательного разбора заданных пользователем параметров и обработки выделенных объектов, фактически, где-то посреди самого́ процесса создания ссылок (потому что даже если пользователь сказал делать, скажем, каталожные симлинки, далеко не факт, что у него вообще выбран хоть один каталог или что заданная глубина рекурсии не превысит реальную глубину выделенных каталогов). К этому моменту внутри программы накоплена дикая туча всевозможных внутренних структур (включая программный стек рекурсивной функции обхода каталогов), и чтобы обеспечить корректную работу, мне необходимо будет все их каким-то образом сериализовать и перебросить в повышенную копию. По сути, изобрести способ клонирования и восстановления внутреннего состояния программы. Я не говорю, что это абсолютно нерешабельно, но по-моему, эта задача по сложности на порядки превышает сложность всей NTFS Links как таковой.

Гораздо логичнее реализовать что-то типа Тоталовского tcmadmin, который будет работать повышенным и выполнять лишь собственно создание ссылок, а вся обработка, построение дерева и прочая мишура останется на совести основного процесса, который будет кидать повышенному лишь единичные команды по созданию конкретной ссылки. Но тут возникает другая проблема: если исходный каталог требует повышенных привилегий для чтения, то основной процесс NTFS Links его не прочитает. То есть, чтение тоже надо выносить в повышенного напарника. А раз так, то снова вылезает проблема своевременного запуска и передачи текущего состояния в обходе дерева каталогов из одного процесса в другой.

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

Добавлено спустя 3 минуты:

MVV wrote:
А компилить можно так же на 6 студии, чтоб без зависимостей

На шестой студии я 64-битку не скомпилю.
Нет уж, с шестёрки я окончательно ухожу. Жаль, конечно, но обеспечивать совместимость проектов между ней и 2008 становится слишком обеременительным делом.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
View user's profile Send private message Visit poster's website


Powered by phpBB © 2001, 2005 phpBB Group