Форум » [x]Harbour » Как делать программу для Сервера-Терминала ? » Ответить

Как делать программу для Сервера-Терминала ?

Andrey: Всем привет ! Подскажите как уже готовую программу переделать под Сервер-Терминалов ! Что нужно учитывать ? Где и как располагать временные файлы ?

Ответов - 28, стр: 1 2 All

LYSK: интерфейс ГУИ или консольный? Если консольный, то надо поплясать с бубном вокруг шрифтов, чтоб символы были достаточно крупные, потому что полноэкранного режима в терминале нет. Надеюсь, у тебя не 16-разрядное приложение? 16-ти сильно садят терминал-сервер, особенно если в Клиппер-программе не пропатчен опрос клавиатуры.. Если админ сервера позволяет, то временные файлы лучше располагать на том же терминал-сервере.

Andrey: Интерфейс консольный ! Программа на хХарборе, использую GTWVT-терминал во весь экран. Шрифты крупные поддерживают все режимы. Смотри картинку: Админ сервера позволяет сделать все. Куда "пихать" временные файлы и выборки ? Т.к. у меня задача файл-серверная, то все выборки я помещал на клиентской машине в папку C:\TEMP Как на хХарборе узнать что задача стартует на терминале-сервера и как сделать для каждого клиента свою временную папку ?

petr: Для каждого сеанса(пользователя) - уникальный ID ( 3 знака хватит), временная папка - C:\temp\%ID%


КСС: Поднимал терминальные сервера, настраивал права пользователей, даже хотел переносить каталог "Documents and Settings" на другой диск. Поэтому мой совет такой: использовать для TEMP только 100% гарантированный ресурс. Предыдущий совет может не сработать, т.к. прав может и не быть. Сейчас у меня в двух офисах именно так - запрещено всё, что не нужно. Для этого необходимо прочесть в ветке реестра HKCU\Enviroment\ значение TEMP или TMP. Но там имеется %USERPROFILE%. Чтобы его получить проще воспользоваться функцией C_getspecialfolder(CSIDL_PROFILE) из MiniGUI-Ext, смотри \MiniGUI\SOURCE\h_winapimisc.prg

Andrey: Спасибо вам большое ! Буду пробовать....

КСС: Вот вспомнил, что как-то я хотел сделать перемещаемый профиль в терминале, а это значит, что путь к профилю будет в формате UNC (\\ServerName\...). Не знаю как xHarbour, а Clipper этого не понимал. Кроме того, временные файлы, лежащие где-то на другом сетевом ресурсе - не есть хорошо. Поэтому я бы использовал другую схему размещения временных файлов: 1. Получить каталог временных файлов стандартными средствами. Обычно, это \Windows\Temp. Туда всегда имеют доступ все программы. 2. Сформировать имя временного файла в виде [Буква(ы)]+[ID сессии]+[Счетчик номера].[ext] = 8.3 символов 3. Буква может быть одна, например F. Но, если Ваших программ будет работать несколько, то следует их идентифицировать. Поэтому в качестве идентификатора программы следует использовать не более трёх букв, например программа для ЖКХ - идентификатор VKH 4. В моих программах все пользователи проходят идентификацию, и, номер записи из зашифрованной таблицы, по которой идентифицировался пользователь, я использую в качестве идентификатора его сессии. Каждое дополнительное подключение пользователя обязательно через другой логин и как следствие - новая сессия и идентификатор. Двух символов обычно хватает - 99 сессий. 5. Затем три символа порядкового номера временного файла - от 001 до 999 и затем по кругу. Примерно так: // MyProgram.ch DEFINE PROGRAM_ID "VKH" ...... FUNCTION GetTempFileName( nSessionID, cExt ) // Для однопользовательских программ nSessionID = 1 // Иначе его нужно передавать или использовать PUBLIC переменную LOCAL cFileName STATIC nCounter := 0 DEFAULT nSessionID := 1, cExt := "TMP" nCounter = nCounter + 1 nCounter = if( nCounter = 1000, 1, nCounter ) cFileName := PROGRAM_ID + PADL( nSessionID, 2, "0" ) + PADL( nCounter, 3, "0" ) + "." + cExt cFileName := upper( cFileName ) // Лучше чётко определять регистр для кроссплатформенных приложений RETURN cFileName

Andrey: Для временных файлов я использую свой каталог \TEMP, могу и использовать \Windows\Temp Мне непонятно как в своей хХарборовской программе для СЕРВЕРА-Терминала определить кто (какой пользователь) запустил мою программу ??? Я бы добавил к своей переменной \TEMP\имя_пользователя и вот готов временный каталог для этого пользователя ! Тогда наверно лучше использовать %USERPROFILE% и не заморачиваться с временными именами файлов. Т.к. иногда бывает нужно знать конкретное имя файла, например для FastReport..... Посмотрел h_winapimisc.prg и даже переделал в отдельную программу, НЕТ ТАМ доступа к переменной: \Documents and Settings\{USERPROFILE}\Local Settings\Temp Как ее можно получить ? Или нужно самому добавлять к %USERPROFILE% \Local Settings\Temp ?

Dima: Andrey пишет: Шрифты крупные поддерживают все режимы Что за шрифт если не секрет ?

Andrey: Dima пишет: Что за шрифт если не секрет ? Использую библиотеку GTWVT3а. Сам терминал переделал Alexander Prostoserdov смотри http://clipperforwindows.narod.ru При линковки этой библиотеки шрифт крупный под различные расширения экрана и печать ДОС-овская есть... Какой там шрифт он использует я не знаю, спроси у него сам. Высылаю на пробу http://files.mail.ru/8PXOKT

Dima: Andrey пишет: Использую библиотеку GTWVT3а А поделиться не сложно ? ;) PS Напомню что я поделился с тобой одним купленным продуктом ;)

Andrey: Дима, все что угодно, только не это. Обещал Александру (он в Москве рядом живет, я с ним работаю по некоторым проектам) без него не распространять. Тем более что он вообще-то собирался выложить в публичное использование, но когда не знаю. Еще раз извини....

Dima: Andrey OK :) А сколько стоит библа ? Ты по чем брал ? На документацию к библиотеке хотя бы можно взглянуть ?

Andrey: Dima пишет: А сколько стоит библа ? Ты по чем брал ? Извини за задержку ответа, что то пропустил твой вопрос. Библиотеку брал давно, уже года полтора прошло. Просил недавно кое-что переделать мне. Делает.... Задачи с этим терминалам очень нравятся бухгалтерам из-за крупного шрифта. Пальцем тычат в 1С и говорят что такого им шрифта не надо.... Позвонил Александру и задал ему твой вопрос. Пока думает.... Доки нет никакой, там все просто. Пример ДОС печати могу выложить.

valery2: А сколько стоит библа ? Ты по чем брал ? Можно нажать Alt+Enter - получиш консоль в полноэкранном режиме разрешением 640х480

LYSK: В терминальном режиме полноэкранного разрешения не бывает.valery2 пишет: Можно нажать Alt+Enter - получиш консоль в полноэкранном режиме разрешением 640х480

Andrey: Не удается запустить бат файл со следующим содержанием: cmd /c start C:\Documents and Settings\InetComp\Local Settings\Temp\ABONENT4\BACKUP_DB.BAT пробовал cmd /c start "C:\Documents and Settings\InetComp\Local Settings\Temp\ABONENT4\BACKUP_DB.BAT" тоже не работает. Подскажите пожалуйста, кто может .....

Dima: Andrey пишет: cmd /c start "C:\Documents and Settings\InetComp\Local Settings\Temp\ABONENT4\BACKUP_DB.BAT" Вот так работает [pre2] cmd /c "C:\Documents and Settings\InetComp\Local Settings\Temp\ABONENT4\BACKUP_DB.BAT" [/pre2]

Andrey: Народ, помогите советом, как правильно нужно сделать ? Есть сервер Win2008, на нем клиенты подключаются через Сервер терминалов к моей задаче. Есть отдельная программа на МиниГуи которая может запускаться в трей и каждые 5 минут отправляет измененные записи на сайт. 1) Как организовать запуск этой программы чтобы она всегда работала (т.е. после перезагрузки сервера) ? 2) Как сделать, чтобы отправку записей юзера видели у себя на раб.столе Т.е. какой механизм использовать можно... Сейчас моя программа в трее пишет: Отправлено 15 записей. Но эту надпись же видит только тот пользователь от кого стартовала программа. Как сделать чтобы все видели это сообщение ?

petr707: 1) Программу лучше эксплуатировать не на сервере, а на виртуальной машине, которую нужно создать и запускать на этом сервере. 2) Выделить отдельную учетную запись для работы этой программы. 3) Виртуалку запускать в режиме автологона для этой учетки - в системном реестре есть такие ключи. Тогда виртуалка поднимется при любом перестарте сервера. 4) Для запуска задачи - использовать Планировщик виртуалки - создать задание Планировщика -запускать программу при условии входа в виртуалку под нужной учеткой 5) для других юзеров - использовать другую часть программы - пусть просто читают лог, который создает первая программа

Andrey: petr707 пишет: 1) Программу лучше эксплуатировать не на сервере, а на виртуальной машине, которую нужно создать и запускать на этом сервере. А можете пояснить почему ? petr707 пишет: 5) для других юзеров - использовать другую часть программы - пусть просто читают лог, который создает первая программа Тогда нужно делать другую программу на МиниГуи, которая будет сидеть в трее и показывать лог програмы отправки ? Так ?

petr707: 1) Для изоляции от сервера и его надежности. На сервер ставится только серверная часть каких либо систем - например Терминальный сервер. У Вас же, видимо, прикладное клиентское ПО, которое запросто может положить сервер в случае каких-либо своих ошибок. Плюс ПО может просить лишних прав доступа, не нужных для сервера, при наладке ПО, установке и прочее. Виртуалка - это просто доступная удаленно специальная сервисная "клиентская" машина. 2) Почему обязательно в трее ? и Почему другую программу ? Программа может быть одна,только запущена во многих сессиях разных юзеров - например при входе юзера в систему. Если все сеансы запуска ПО юзерами будут запущены в терминальной сессии сервера, так вообще это одна вычислительная среда. Передавайте данные разным процессам хоть через мьютексы. Главный процесс делает одно, остальные его смотрят.

Andrey: petr707 пишет: Программа может быть одна,только запущена во многих сессиях разных юзеров - например при входе юзера в систему. Хорошая идея ! Я про неё забыл, хотя сам это делал на терминалке еще. petr707 пишет: Передавайте данные разным процессам хоть через мьютексы. Главный процесс делает одно, остальные его смотрят. Это что-то сложновато... Нужен бы пример для понимания. Через мьютексы я так и не добился передачи данных между двумя ехе-никами...

PSP: petr707 пишет: Передавайте данные разным процессам хоть через мьютексы. Вообще-то, мютекс - это просто семафор. Включено/выключено. Как им можно передавать данные?

petr707: Процесс,который не нашел мьютекс, создает его и будет писателем(в лог-файл или еще куда-то), остальные - читатели этого лога. Это к вопросу - много программ или одна.

PSP: petr707 пишет: Процесс,который не нашел мьютекс, создает его и будет писателем(в лог-файл или еще куда-то), остальные - читатели этого лога. Это к вопросу - много программ или одна. Ну так-то да... )

Andrey: PSP пишет: Вообще-то, мютекс - это просто семафор. Включено/выключено. Мютекс передается в одном адресном пространстве ? Если да, то как одна программа запущенная под разными пользователями, имеющие свое адресное пространство, увидит мютекс другого пользователя ? Я в этом не разбираюсь, поясните немного пожалуйста.

PSP: Andrey пишет: Мютекс передается в одном адресном пространстве ? Если да, то как одна программа запущенная под разными пользователями, имеющие свое адресное пространство, увидит мютекс другого пользователя ? Я в этом не разбираюсь, поясните немного пожалуйста. Мютекс - это http://ru.wikipedia.org/wiki/%D0%9C%D1%8C%D1%8E%D1%82%D0%B5%D0%BA%D1%81

Andrey: petr707 пишет: 5) для других юзеров - использовать другую часть программы - пусть просто читают лог, который создает первая программа Мютексом не смог воспользоваться. Не понял как сделать взаимодействия между различными терминалами, т.к. область загрузки у каждого терминала своя и передать между ними ничего не смог. Остановился на лог-файле, т.к. файл один между терминалами. Переделал отдельную программу на МиниГуи которая отправляет файлы на сайт, пишет в лог-файл (dbf) и сделал отдельную программу просмотра, которая каждые 30 сек. выводит последнюю запись из лог-файла. Просто и надежно.



полная версия страницы