Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.01.10;
Скачать: [xml.tar.bz2];

Вниз

Разработка приложения для в рамках в Win Terminal Service   Найти похожие ветки 

 
Суслик_   (2009-10-30 22:15) [0]

Здравствуйте.

Мне нужно доработать свое приложение, чтобы оно корректно работало в рамках Windows Terminal Services.

У кого есть успешный опыт разработок (доработок) приложений для корректной работы в терминальной среде?

Заранее благодарю!

ЗЫ Я почитал справочники администратора. Но слишком тяжко для меня развертывать все среду с терминалами. Мне бы взгляд такой простой и незамысловатый со стороны разработчика и требований к нему со стороны операционной системы :)


 
Демо ©   (2009-10-30 22:29) [1]

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


 
GDI+   (2009-10-30 22:31) [2]

Windows7 и переключение пользователя.

Еще можно Win7_Logo автоматическое тестирование(программку запускать на своей машине) пройти
http://www.microsoft.com/rus/isv/win7_logo.aspx

Оно также твоё ПО на совместимость с терминальными решениями тестирует.

Если без этого - проверять на отсутствие глобальных объектов и возможность работы нескольких копий приложения с "файлами приложения" одновременно.


 
Суслик_   (2009-10-30 23:29) [3]


> Демо ©   (30.10.09 22:29) [1]
>
> Нужно знать требования к самому приложению, тогда проще
> будет и ответить.


Спецификация:

1. В программном комплексе есть три приложения: А, Ф и С.

2. Приложение С:
  2.1. Это windows-служба (без взаимодействия с рабочим столом).
  2.2. Является сервером - слушает и отвечает на запросы посредством named pipes.
  2.3. Для хранения данных использует файлы.
  2.4. В Комплексе присутствует в единственном экземпляре.

3. Приложение А:
  3.1. Это GUI-приложение.
  3.2. Обращается к приложению С через named pipes - обычно по локальной сети, но бывает, что А и С стоят на одной машине.
  3.3. В Комплексе присутствует в единственном экземпляре.
  3.4. Между сеансами хранит данные в файлах.
  3.5. Обращается к локальному USB порту к электронному ключу защиты. Для доступа используются драйвера (вроде уже можно без драйверов, но я это еще не тестировал)

4. Приложение Ф:
  4.1. Это GUI-приложение.
  4.2. Обращается к приложению С через named pipes.
  4.3. В Комплексе присутствует во множестве экземпляров.
  4.4. Между сеансами хранит данные в файлах.

Как-то так.


> GDI+   (30.10.09 22:31) [2]
>
> Windows7 и переключение пользователя.


Спасибо, посмотрю.


 
Игорь Шевченко ©   (2009-10-30 23:32) [4]


>   4.4. Между сеансами хранит данные в файлах.


Этот пункт убери.


 
Суслик_   (2009-10-30 23:36) [5]


> Игорь Шевченко ©   (30.10.09 23:32) [4]
>
>
> >   4.4. Между сеансами хранит данные в файлах.
>
>
> Этот пункт убери.
>


Почему? Я посмотрел сегодня certified for windows for win server 2003. Там нет такого пункта. На что ты опираешься, давая такой совет?


 
Суслик_   (2009-10-30 23:45) [6]

Кстати, знаете, что приложение, работающее в режиме терминалов в winserv2003, не должно рисовать изображение в bitmap, а должно сразу рисовать на экран!!! А как же double buffering в Delphi?

Вот документ http://download.microsoft.com/download/a/a/8/aa82f1fb-2eaf-48b2-89ec-959ba0f00a4a/AppSpec.doc, а вот и цитата

>
> S2.2 The application should not write to off-screen bitmaps
> in remote sessions.
> Do not write to off-screen bitmaps and blit the result to
> the screen. Write directly to the screen for remote sessions.
>
>


Это камень в сторону Delphi )))


 
GDI+   (2009-10-30 23:54) [7]


> 3.4. Между сеансами хранит данные в файлах.
> 4.4. Между сеансами хранит данные в файлах.


Или сделай файлы уникальными для каждой сессии(так как один пользователь может зайти в две сессии одновременно).

+ для хранения локальных данных уместно использовать какую-то легковесную БД (SQLite или FB), создаваемую динамически.


> Суслик_   (30.10.09 23:36) [5]
> Почему? Я посмотрел сегодня certified for windows for win
> server 2003. Там нет такого пункта. На что ты опираешься,
>  давая такой совет?


В сертификации под Win7 это варнинг. Тоесть можно забить но при получении значка спросят почему.


 
Игорь Шевченко ©   (2009-10-30 23:57) [8]


> Почему?


потому что не будет работать


 
GDI+   (2009-10-30 23:57) [9]


> Суслик_   (30.10.09 23:45) [6]
>
> Кстати, знаете, что приложение, работающее в режиме терминалов
> в winserv2003, не должно рисовать изображение в bitmap,
> а должно сразу рисовать на экран!!! А как же double buffering
> в Delphi?


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

При канале между клиентом-сервером в 1Мбит незаметно, а вот по момеду...


 
GDI+   (2009-10-30 23:58) [10]


> Игорь Шевченко ©   (30.10.09 23:57) [8]
> > Почему?
> потому что не будет работать


Это я уже объяснил в [7].


 
Суслик_   (2009-10-31 01:23) [11]


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


1) Я понимаю, что передаются примитивы, уважаемый GDI+, а не точки. Последнее слишком дорого.

Смущает другое - как же программы на дельфи проходят сертификацию?
ЛОГИЧНЫЙ вопрос - можно ли во всем приложении, разработанном на Delphi, легко уже в runtime отключить double buffering?

2) По поводу доработки с хранением данных файлах у меня есть пара вопросов.

Я расскажу еще подробнее о программу, надеюсь GDI+, ты разрешишь мои вопросы. Приложение у меня несколько специфическое (не удивительно - мы единственные разработчики в России подобных продуктов). Поэтому я готов приложить требуемые усилия, чтобы ты смог понять проблему и дать дельный совет.

Немного про текущую архитектуру. В настоящий момент мою программу нельзя назвать чистым клиент-сервером. Это скорее распределенные точки, которые используют сервер (приложение С), для синхронизации. Эта архитектура обладает массой недостатков. Однако есть и достоинства (можно, например, работать полностью автономно). Т.о. предлагаю не обсуждать недостатки архитектуры - я их и сам все знаю. Я хочу разобраться в том, как мне докрутить текущий подход к требуемой задаче.

Обычно программа используется так:
1. Приходит в класс препод, он же Администратор игры, далее просто Администратор.
2. Включает программу А (сокращение от Администратор).
3. Рассаживает студентов за компьютеры где стоят программы участников Ф (от слова Фирма).
4. Администратор считает количество голов студентов.
5. Администратор создает новую игру (да, забыл сказать - речь про образовательную программу для ВУЗов - пошаговая экономическая игра).
6. Записывает ее на сервер С.
7. Пробегается по каждому компьютеру и запускает игру для каждой фирмы (у каждой команды свой номер фирмы - чужие фирмы игрокам не видны).
8. После этого фирма принимает решения, передает на сервер, администратор считывает с сервера, совершает обсчет модели, записывает результаты, фирмы читают.

При этом в шаге 8 уже нет ручного труда по передачи данных между компьютерами: нажал пользователь кнопочку и все, что нужно "ушло" на сервер.

В описанной последовательности действий в общем случае для каждого приложения по одному компьютеру - 1 для С, 1 для А и несколько для Ф.

Что происходит между сессиями (обычно именно несколько сессий используется)? Студент закрывает программу и выключает компьютер. В следующий раз он запускает тот же компьютер, на котором сидел на прошлом занятии, открывает уже сам программу, видит там именно свою фирму (именно ту, которая была в прошлой сессии на данному компьютере). Компьютер может сломаться, может еще что произойти - в этом случае Администратор может заново перенести требуемую информацию из А в Ф (возможно уже на другом компьютере). И далее все как в пункте 8 выше, т.е. автоматически.

Чтобы не считать описываемое каким-то сюром представь, что у тебя нет сети вообще - есть компьютеры, между которыми ты носишь данные флешкой. В этом случае С вообще не используется: из Ф решения игроков переносятся непосредственно в А, а из А в Ф. При этом полная БД информации (данные о всей игре) находится в А. В программе Ф находится часть, относящаяся к этой команде. Думаю понятно )

Т.е. понятно, что локальное хранение для А и Ф нужно (если, конечно, не написать все заново).  

ТЕПЕРЬ по сути главный вопрос и непонятки для меня. Из сказанного видно, что идентифицирующей информацией для рабочего места является не учетка (она здесь вообще роли не играет), а физический клиентский компьютер. Не буду я утверждать, что эта философия правильная, ее как раз можно изменить. Например, в качестве идентифицирующей информации выбрать учетную запись - я же не против. Тут вопрос в другом - раньше все равно было под какой учеткой ходили - все равно компы разные.

А вот сейчас то что делать? Ну вот заходят они такие одинаковые student"ы (т.е. под одной учеткой). И что с ними на этом терминале делать? Ну понятно, что можно приплести некий ID с машины клиента (не знаю, но наверняка можно его где-то взять). Но это уже вообще ерунда какая-то: там системные админы с ума посходят от такой архитектуры. Т.е. я не понимаю, что мне делать с советом сделать имена файлов уникальные - мне как раз надо, чтобы они хранились от сессии к сессии.

Пока я писал сей труд, я понял, что вопрос больше идейный, чем технический. Посоветуй что-нибудь, уважаемый GDI+. А?

В принципе я даже совет переписать всё нафиг приемлю. Только даже в случае тотального переписывания все равно надо решить - что делать с этими одноликими пользователями, ходящими под одной учеткой.

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


 
Игорь Шевченко ©   (2009-10-31 01:39) [12]


> можно ли во всем приложении, разработанном на Delphi, легко
> уже в runtime отключить double buffering?


нафиг не надо отключать, все и без того работает. Венда она умная.


> Чтобы не считать описываемое каким-то сюром представь, что
> у тебя нет сети вообще - есть компьютеры, между которыми
> ты носишь данные флешкой


Сделать "виртуальную флешку" и хранить ее в базе данных


 
GDI+   (2009-10-31 01:51) [13]


> Суслик_   (31.10.09 01:23) [11]
>
>
> > Угу, тем что при отрисовке напрямую передаются только
> примитивы,
> >  при отрисовке в битмап - вся картинка видимой части окна.
>
> 1) Я понимаю, что передаются примитивы, уважаемый GDI+,
> а не точки. Последнее слишком дорого.


Не дорого. VNC как раз передаёт картинкой весь экран.

Так что имеем для 800*600 8-бит ~4Мбит достаточно для кадра в сек. В общем если решение подключено на 100Мбит, а лучше 1Гбит на сервере карточку, то это не проблема. Можно просто ничего не делать.

Как вариант - сделай формочку отрисовываемую с определённой частотой с bitmap и посмотри на тестовой машине как оно работает.

По поводу отключения Doublebuffering  - во всех оконных компонентах просто выставить
Doublebuffering := False;

Можно проверять при создании формы на терминал (как не помню, но есть функция) и включать или отключать буферизацию.

Как я еще заметил Doublebuffering глючит при XPManifest на форме, если использовать GroupBox и пр контейнерные компоненты.


 
GDI+   (2009-10-31 01:53) [14]


> Игорь Шевченко ©   (31.10.09 01:39) [12]
>
>
> > можно ли во всем приложении, разработанном на Delphi,
> легко
> > уже в runtime отключить double buffering?
>
>
> нафиг не надо отключать, все и без того работает. Венда
> она умная.


А если 30 разных картинок в сек выводить на форму? Конечно понимаю что она определяет отличие от предыдущей и отсылает только отличия. Но ACDSEE через терминал слегка подтормаживает.


 
GDI+   (2009-10-31 02:01) [15]

>>Суслик_   (31.10.09 01:23) [11]

Как вариант решения - вижу только:

1. Создавать на каждого студента уникальный "игровой аккаунт", который хранится в базе на сервере.

2. Все "невычисляемые" данные  данные хранятся на сервере в унифицированных таблицах и привязаны к аккаунту по внешнему ключу. Этакой вариант виртуальной файловой системы. Можете наброски посмотреть здесь http://eds.sourceforge.net/conception/pdf/eds_db_simple.pdf

3. Добавить функции бекапа акканутов и переноса данных из аккаунта в аккаунт. Но это понятно.

4. При старте приложения на клиент скачиваются данные (во темпоральных файлах или базах) и в режиме онлайн синхронизируются с сервером (толстый клиент с онлайн-обновлением). Все локальные промежуточные данные хранятся на клиенте и вычисления идут на клиенте.


 
Игорь Шевченко ©   (2009-10-31 02:09) [16]

GDI+   (31.10.09 01:53) [14]


> А если 30 разных картинок в сек выводить на форму? Конечно
> понимаю что она определяет отличие от предыдущей и отсылает
> только отличия. Но ACDSEE через терминал слегка подтормаживает.
>


Мы не используем терминальный режим для ACDSEE. А для вывода картинок 30 раз секунду в нетерминальной сессии можно пользоваться GetSystemMetric


 
GDI+   (2009-10-31 02:15) [17]

GetSystemMetric SM_REMOTECONTROL ?


> GDI+   (31.10.09 02:01) [15]


Еще вдогонку. Для работы с данными организовать прокси-обект который при чтении будет читать из локальных данных, при записи писать одновременно и в локальную таблицу/файл и на сервер.


 
Игорь Шевченко ©   (2009-10-31 02:19) [18]


> SM_REMOTECONTROL ?


SM_REMOTESESSION


 
Суслик_   (2009-11-02 23:55) [19]

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

2) Хочу вот что уточнить. Насколько я понял, в правах админа запретить вообще что-то сохранять между сессиями. Так?

Собстно вопрос - а что тогда делать то пользователю? На флешку сохранять? Или пользоваться специально разработанными серверными приложениями для хранения своих данных?

Позволю себе себе вот так поставить вопрос - если я скажу в руководстве системного администратора, что требованиями к программе являются:
1. Одновременный запуск под одним пользователем запрещен - нужны разные учетки (например, для первого компьютера - это User01, для второго User02 и т.д.).
2. Должно быть разрешено хранение между сессиями.
, то это решил в случае использования терминалов проблемы с учетом полного сохранения описанной выше архитектуры?

Просьба ответить по сути - да или нет )


 
Суслик_   (2009-11-11 12:53) [20]

Опять я.

Скажите, пожалуйста, кто знает - гостевая система в рамках WINDOWS Terminal Services "видит" USB устройства на сервере? В частности, электронный ключ защиты?

Можно так перефразировать - можно ли настроить WINDOWS Terminal Services так, чтобы гостевая система видела USB?

Заранее, благодарю.


 
Игорь Шевченко ©   (2009-11-11 13:29) [21]


> Можно так перефразировать - можно ли настроить WINDOWS Terminal
> Services так, чтобы гостевая система видела USB?


Ты книжки по подготовке к экзаменам все прочитал ?

Можно настроить.


 
Дмитрий Белькевич   (2009-11-11 13:48) [22]


> Скажите, пожалуйста, кто знает - гостевая система в рамках
> WINDOWS Terminal Services "видит" USB устройства на сервере?
>  В частности, электронный ключ защиты?


Ключ - видит.


 
Суслик_   (2009-11-11 14:14) [23]

2ИШ
Я же писал, мне надо чтобы попроще было - не хочу я развертывать у себя Terminal Service полноценный. А в бумажном справочнике админа на бумаге не могу найти. В remote desktop for administration видит USB. Это я проверил.

Ок. Все понял. Благодарю.


 
Игорь Шевченко ©   (2009-11-11 14:23) [24]

Суслик_   (11.11.09 14:14) [23]

А как ты развернешь неполноценный ?


 
Petr V. Abramov ©   (2009-11-11 22:12) [25]


> Суслик_   (31.10.09 01:23) [11]

забей на локальное хранение и храни на сервере. Класс без локальки - нонсенс по нынешним временам.
а вот привязка сессии к компу или к вендовой учетке (а если это wine, тогда что?) обеспечит тебе анальные проклятья тысяч админов. И юзеров, парень с девкой познакомились (помирились) на переменке, решили за одну парту сесть. Если это связано с гимром, они вообще забьют на игру и пойдут в парк, далее по списку, а если нет - вместе играть сядут.
так что сделай свою авторизацию, простейшую, ведь это ж игра, если кто сломает, выгонят его к хвостам собачьим за неспортивное поведение, и усё.


 
Суслик_   (2009-11-11 23:34) [26]

Слияние и поглощение (финансовое, в смысле) будет в следующей версии.

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

Админы и так меня проклинают. Я привык. Они вообще не очень любят работать - устроился на работу админов в ВУЗ, считай 2 зарплаты - одна за админство, вторая за работу (программирование), которые ты делаешь на работе.


 
Petr V. Abramov ©   (2009-11-11 23:40) [27]


> Суслик_   (11.11.09 23:34) [26]

а нафига тебе полноценный клиент-сервер? может в твоей конкретной, довольно редкой ситуации, лучше полноценная трехзвенка? но со своей авторизацией. вот mail.ru - треззвенка же, но авторизация своя.


 
Суслик_   (2009-11-12 00:59) [28]

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

Ты прав, я тоже прав, все правы. Но в сутках 24 часа.

Пойду Архангельского читать (нет, не ТОГО)....



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2010.01.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.008 c
15-1257523019
Nikols
2009-11-06 18:56
2010.01.10
Программа для удаленного управления.


2-1255952617
defen
2009-10-19 15:43
2010.01.10
запрет на закрытие программы или запустить как системный ресурс


1-1233066145
webpauk
2009-01-27 17:22
2010.01.10
курсор в Tedit


15-1257779624
palva
2009-11-09 18:13
2010.01.10
Берлинское домино


2-1258436479
Pascal96
2009-11-17 08:41
2010.01.10
Как найти первую цифру дробной части?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский