CaptainFlint

|
Posted: Sat Oct 08, 2011 21:17 Post subject: |
|
|
MVV wrote: | Ну не так и муторно повысить привилегии. |
Я говорил не про это, а про повышение уровня UAC. Запросить привилегию — это раз плюнуть, но система же не выдаст её обычному, неповышенному процессу. А главная сложность в том, что текущий процесс повысить нельзя, надо запускать новый и как-то обеспечивать взаимодействие повышенного с неповышенным.
Смотри, что получается: запросить привилегию сразу же после нажатия кнопки OK я не могу, потому что для жёстких ссылок и junction'ов она не требуется (а каждый раз выдавать UAC-окно, независимо от того, реально ли нужно повышение, — это не комильфо). Таким образом, я должен сделать это, только если пользователь захотел создавать именно симлинки. А определить эту ситуацию я смогу лишь на этапе окончательного разбора заданных пользователем параметров и обработки выделенных объектов, фактически, где-то посреди самого́ процесса создания ссылок (потому что даже если пользователь сказал делать, скажем, каталожные симлинки, далеко не факт, что у него вообще выбран хоть один каталог или что заданная глубина рекурсии не превысит реальную глубину выделенных каталогов). К этому моменту внутри программы накоплена дикая туча всевозможных внутренних структур (включая программный стек рекурсивной функции обхода каталогов), и чтобы обеспечить корректную работу, мне необходимо будет все их каким-то образом сериализовать и перебросить в повышенную копию. По сути, изобрести способ клонирования и восстановления внутреннего состояния программы. Я не говорю, что это абсолютно нерешабельно, но по-моему, эта задача по сложности на порядки превышает сложность всей NTFS Links как таковой.
Гораздо логичнее реализовать что-то типа Тоталовского tcmadmin, который будет работать повышенным и выполнять лишь собственно создание ссылок, а вся обработка, построение дерева и прочая мишура останется на совести основного процесса, который будет кидать повышенному лишь единичные команды по созданию конкретной ссылки. Но тут возникает другая проблема: если исходный каталог требует повышенных привилегий для чтения, то основной процесс NTFS Links его не прочитает. То есть, чтение тоже надо выносить в повышенного напарника. А раз так, то снова вылезает проблема своевременного запуска и передачи текущего состояния в обходе дерева каталогов из одного процесса в другой.
В общем, я пока не смог придумать схему, которая меня бы устроила одновременно с точки зрения и юзабилити, и сложности кода. Понятно, что в крайнем случае можно реализовать повышенный перезапуск от одной лишь галочки "создавать симлинки", даже если реально симлинки создавать не потребуется, но мне эта затея очень уж не нравится…
Добавлено спустя 3 минуты:
MVV wrote: | А компилить можно так же на 6 студии, чтоб без зависимостей |
На шестой студии я 64-битку не скомпилю.
Нет уж, с шестёрки я окончательно ухожу. Жаль, конечно, но обеспечивать совместимость проектов между ней и 2008 становится слишком обеременительным делом. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|