powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Один экземпляр приложения.
46 сообщений из 46, показаны все 2 страниц
Один экземпляр приложения.
    #38474399
Всем привет. Я хотел узнать. Как в Фокс Про допустить только один экземпляр запущенного приложения и как это можно реализовать проще всего? Всем спасибо.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38474402
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бобков ИльяВсем привет. Я хотел узнать. Как в Фокс Про допустить только один экземпляр запущенного приложения и как это можно реализовать проще всего? Всем спасибо.

Как предотвратить повторный запуск приложения
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38474419
PaulWist, спасибо
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38474540
Нашел более простое решение просто сохранял переменную в мем файл и проверял её на запуске.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38474567
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бобков ИльяНашел более простое решение просто сохранял переменную в мем файл и проверял её на запуске.
Теперь попробуй убить свою прогу (снять задачу в диспетчере)
Или просто CANCEL сделай где-нибудь внутри кода.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38474643
Dima T, У меня на этот случай есть вторая проверка (программа завершена не корректно). И всё работает. Просто сбрасываю переменную с копией экземпляра приложения и всё.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38478639
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бобков Илья,
IF AppAlreadyRunning()
=MESSAGEBOX("Приложение уже запущено..", 0 + 16 +0, ;
"Внимание.")
QUIT
ENDIF
*-------------------------------------------
FUNCTION AppAlreadyRunning
LOCAL hsem, lpszSemName
#DEFINE ERROR_ALREADY_EXISTS 183
DECLARE INTEGER GetLastError IN win32API
DECLARE INTEGER CreateSemaphore IN WIN32API ;
STRING @ lpSemaphoreAttributes, ;
LONG lInitialCount, ;
LONG lMaximumCount, ;
STRING @ lpName
lpszSemName = 'PUBLIC_FOOD'
hsem = CreateSemaphore(0,0,1,lpszSemName)
RETURN (hsem # 0 AND GetLastError() == ERROR_ALREADY_EXISTS)
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38479036
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бобков ИльяDima T, У меня на этот случай есть вторая проверка (программа завершена не корректно). И всё работает. Просто сбрасываю переменную с копией экземпляра приложения и всё.
Можно уточнить каким образом выполняется эта проверка? Переменная физически где находится? В том же mem-файле? Как Вы по значению переменных отличаете завершенную не корректно программу от программы, которая сейчас продолжает работать?
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38480736
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot ВладимирММожно уточнить каким образом выполняется эта проверка? Переменная физически где находится? В том же mem-файле? Как Вы по значению переменных отличаете завершенную не корректно программу от программы, которая сейчас продолжает работать?[/quot]
вот тебе не все равно насколько квадратны колеса у велосипеда?
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38481128
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T

Из хелпа:

SAVE TO Команда - Сохраняет текущие переменные памяти и массивы в файле переменных памяти или в memo-поле.
RESTORE FROM Команда - Извлекает переменные памяти и массивы переменных памяти, сохраненные в файле переменных памяти или в memo-поле, и помещает их в память.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38482601
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Dima T

Из хелпа:

SAVE TO Команда - Сохраняет текущие переменные памяти и массивы в файле переменных памяти или в memo-поле.
RESTORE FROM Команда - Извлекает переменные памяти и массивы переменных памяти, сохраненные в файле переменных памяти или в memo-поле, и помещает их в память.
И каким образом это помогает решить поставленную задачу? Как Вы планируете отличить содержимое mem-файла, созданного работающей в данный момент программой, от содержимого mem-файла, оставшегося без изменений вследствие аварийного завершения работы (сбой)? Во втором случае нет работающего приложения, но mem-файл выглядит так, как-будто приложение продолжает работать.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38482905
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМsg12Dima T

Из хелпа:

SAVE TO Команда - Сохраняет текущие переменные памяти и массивы в файле переменных памяти или в memo-поле.
RESTORE FROM Команда - Извлекает переменные памяти и массивы переменных памяти, сохраненные в файле переменных памяти или в memo-поле, и помещает их в память.
И каким образом это помогает решить поставленную задачу? Как Вы планируете отличить содержимое mem-файла, созданного работающей в данный момент программой, от содержимого mem-файла, оставшегося без изменений вследствие аварийного завершения работы (сбой)? Во втором случае нет работающего приложения, но mem-файл выглядит так, как-будто приложение продолжает работать.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38482909
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМКак Вы планируете отличить содержимое mem-файла, созданного работающей в данный момент программой, от содержимого mem-файла, оставшегося без изменений вследствие аварийного завершения работы (сбой)? Во втором случае нет работающего приложения, но mem-файл выглядит так, как-будто приложение продолжает работать.

Понимаю вас, решение не ахти.
Можно так: По окончании первая переменная записывается в mem-файл и проверяется через RESTORE.
При удачном завершении значение второй переменной меняется и также сохраняется. При отказе ее значение в mem-файле не меняется.
В принципе, можно обойтись и одной переменной на три значения, но это на любителя.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38483977
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Можно так: По окончании первая переменная записывается в mem-файл и проверяется через RESTORE.
При удачном завершении значение второй переменной меняется и также сохраняется. При отказе ее значение в mem-файле не меняется.
В принципе, можно обойтись и одной переменной на три значения, но это на любителя.
Пример кода покажи.

Ты пытаешься доказать что мягкое и теплое это одно и тоже. Так показывай как мягкость термометром меряют.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38484103
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T

Примеры кода есть в ссылке, которую я чуть выше вам дал.
Или - "... не читатель, а писатель", судя по вашему посту?
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38484125
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Можно так: По окончании первая переменная записывается в mem-файл и проверяется через RESTORE.
При удачном завершении значение второй переменной меняется и также сохраняется. При отказе ее значение в mem-файле не меняется.
В принципе, можно обойтись и одной переменной на три значения, но это на любителя.
Давным давно, во времена Win 3.11 один из вариантов решения задачи запрета одновременного запуска нескольких копий одного и того же приложения было создание файла при запуске и удаление при выходе. Т.е. последовательность действий была такая

1. При старте приложения ищем файл с определенным именем, находящийся в определенной директории
1.1. Если такого файла нет, то это означает, что других копий приложения запущено не было. Значит, можно запускать приложение.
1.2. Если такой файл найден, то это означает, что данное приложение уже было запущено. Пользователь пытается запустить его второй раз. Значит, запускать нельзя
2. Если приложение было запущено, то при старте указанный файл создается в указанной директории
3. При завершении работы приложения файл удалялся

Т.е. даже не важно, что там внутри файла находится. Достаточно самого факта существования файла.

На первый взгляд, кажется, что схема идеальная. Но это только на первый взгляд. Представим себе ситуацию, когда приложение было завершено, но файл не удалился. Что получим? При попытке запустить приложение, мы видим, что файл есть. Значит, приложение запускать нельзя.

Как следствие, после такого события приложение невозможно будет запустить, пока программист вручную не удалит файл с диска. Чем, собственно, программисты, реализовавшие такую схему контроля, периодически и занимались... Нештатное завершение приложения (удалили процесс) - зови программиста. Без вариантов...

Так вот, добавление некоего содержимого в это файл проблему не решит. Никак. Ведь любые изменения содержимого предполагается вносить в этот файл при штатном (корректном) завершении приложения. Если же приложение было завершено не корректно, то содержимое файла останется неизменным. Таким, какое оно есть в процессе работы приложения. Но ведь приложение уже не работает! Как следствие, снова требуется ручное вмешательство программиста, чтобы запустить приложение.

Вы снова вернулись к началу истории программирования. Снова наступаете на те же грабли...

sg12Примеры кода есть в ссылке, которую я чуть выше вам дал.
Где? Что-то я тоже не вижу никаких Ваших ссылок в этой теме...
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38484282
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ

История дело интересное.
Но в теме речь идет о переменной, а не файле-семафоре - это разные решения, не надо путать.
Даже новичок ТС заметил, что нужно делать две проверки, а не одну.
Что и я пытался вам объяснить.
В своем примере выполните вторую проверку и он заработает.
Примеры для ДимыТ из хелпа - надо в нем набрать "SAVE TO".
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38484408
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

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

Механизм открытия файла в монопольном режиме прост и универсален, потому что даёт возможность гибких решений,
например у меня это используется для следующих целей:
- можно запретить одновременную работу второго экземпляра приложения (блокируемый файл по выбору в любом месте);
- можно запретить одновременную работу с экземпляром данных (блокируемый файл в папке с данными);
- можно организовать самообновление программы через интернет (основная программа и инсталлятор запускают друг друга, ожидая завершения - освобождения файла).
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38484609
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12ВладимирМ

История дело интересное.
Но в теме речь идет о переменной, а не файле-семафоре - это разные решения, не надо путать.
Даже новичок ТС заметил, что нужно делать две проверки, а не одну.
Что и я пытался вам объяснить.
В своем примере выполните вторую проверку и он заработает.
Примеры для ДимыТ из хелпа - надо в нем набрать "SAVE TO".
Так ПОКАЖИТЕ свой пример? ГДЕ Вы его привели?

И еще раз, любой анализ переменных основан на том факте, что вы ШТАТНО завершили приложение. Т.е. непосредственно перед выходом как-то там изменили переменные. А если выход был НЕ штатным. Т.е. выйти-то вышли, а вот переменные не изменились. Ваш пример, который Вы неизвестно где привели, эту проблему решает?

Переменные внутри файла - это всего-лишь "бантики". Принципиально НИЧЕМ не отличаются от факта создания-удаления файла. Разве что, это более сложное решение.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38484617
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aswsВладимирМ,

Файл нужно держать открытым во время работы программы - тогда проблем не будет.
Не лень было так подробно расписывать очевидные недостатки криворукого решения, когда файл не держится программой окрытым?
Я исходил из предположения, что объясняю человеку, который искренне заблуждается. Показал в чем ошибочность выбранного способа решения

aswsМеханизм открытия файла в монопольном режиме прост и универсален, потому что даёт возможность гибких решений,
Чем этот вариант отличается от банальной блокировки записи в DBF-таблице? Вот ЭТО действительно просто и понятно для программиста FoxPro. Более того, чрезвычайно гибко и удобно. А с файлами, встает вопрос администрирования доступа.

А вопросы администрирования доступа к файлам и директориям в настоящее время уже достаточно сложен. Судя по уровню вопросов спрашивающих, решить эту проблему они не смогут. Скорее всего, у большинства пользователей просто не будет прав на создание и блокировку файлов в ряде директорий. Придется "мудрить" не с расположением, а с именами файлов. Т.е. ни о какой "простоте" и "понятности" не может быть и речи...
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38484772
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ

Вы опять что-то перепутали - я не обещал вам каких-либо примеров.
И вообще, какой смысл их сочинять для удовлетворения чьего-то гонора, если его можно сбить.
Вы также продолжаете путать переменные и файлы - это непростительно даже новичку.
Первоначально записанные значения переменных меняются при штатном выходе, при нештатном нет, я уже объяснял.
Если mem-файл вас раздражает, вы можете сохранить их значения в таблице, ini-файле, в текстовом виде и т.п.
И еще - рабочие файлы программы обычно принято располагать в рабочей директории, куда есть доступ, иначе вы просто не запустите свою программу.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38485157
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Вы опять что-то перепутали - я не обещал вам каких-либо примеров.
Правильно, ни один уважающий себя тролль не будет подтверждать свой словесный понос примерами кода
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38485230
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМaswsМеханизм открытия файла в монопольном режиме прост и универсален, потому что даёт возможность гибких решений,
Чем этот вариант отличается от банальной блокировки записи в DBF-таблице? Вот ЭТО действительно просто и понятно для программиста FoxPro. Более того, чрезвычайно гибко и удобно. А с файлами, встает вопрос администрирования доступа.

А вопросы администрирования доступа к файлам и директориям в настоящее время уже достаточно сложен. Судя по уровню вопросов спрашивающих, решить эту проблему они не смогут. Скорее всего, у большинства пользователей просто не будет прав на создание и блокировку файлов в ряде директорий. Придется "мудрить" не с расположением, а с именами файлов. Т.е. ни о какой "простоте" и "понятности" не может быть и речи...Да, конечно, согласен,
это у меня от привычки юзать в FoxPro клиент-серверную архитектуру с "толстыми" клиентами )),
то-есть никаких шаред-файлов и всегда есть полные права как минимум на папку...
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38485248
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tsg12Вы опять что-то перепутали - я не обещал вам каких-либо примеров.
Правильно, ни один уважающий себя тролль не будет подтверждать свой словесный понос примерами кода

Посклочничать вам опять охота, засиделись без ассистентов.
Решили половить на дурачка.
Там было пояснение - какой смысл их сочинять для удовлетворения чьего-то гонора.

И не надо блефовать, у вас самих нет серьезных кодов.
Все, что вы имеете - это из года в год обрывки одних и теж же процедур и советов, для новичков, на пальцах: "Примерно так ...".
Вы из них хоть один работающий проект сумеете собрать?
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38485559
sg12...Но в теме речь идет о переменной, а не файле-семафоре - это разные решения, не надо путать.


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



Вопрос-то состоял именно в том, КАК по значению переменной в сохраненном файле(вариант № 1) или просто по наличию файла(вариант № 2) отследить, что программа реально работает, а не "вылетела" по ошибке...

Ответ от ВладимираМ прозвучал: "Никак"

С моей точки зрения, этот ответ не совсем правильный. Отследить закрытие по ошибке/через менеджер задач можно, так как при закрытии приложения система должна закрыть все его окна и завершить главный вызывающий процесс. Этот момент можно перехватить в приложении и успеть записать переменную в соответствующий файл. На С/С++ это (отследить тип запроса системы на закрытие приложения) сделать вполне возможно... На VFP - не знаю. Может и можно... как-нибудь... по ON Shutdown, например...
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38485570
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав С...кийС моей точки зрения, этот ответ не совсем правильный. Отследить закрытие по ошибке/через менеджер задач можно, так как при закрытии приложения система должна закрыть все его окна и завершить главный вызывающий процесс. Этот момент можно перехватить в приложении и успеть записать переменную в соответствующий файл. На С/С++ это (отследить тип запроса системы на закрытие приложения) сделать вполне возможно... На VFP - не знаю. Может и можно... как-нибудь... по ON Shutdown, например...

Попробуй, поймай:

Код: sql
1.
2.
Declare integer ExitProcess in win32api integer  
  ? ExitProcess(1)
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486500
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав С...кийОтвет от ВладимираМ прозвучал: "Никак"

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

Например: запусти прогу по сети (из расшаренной папки), затем свой комп выдерни из розетки (или выдерни сетевой провод). Как другой пользователь сети узнает что ты некорректно завершил работу?

Не менее гуманный способ выполнить извне TerminateProcess() или снять задачу из диспетчера (это тоже самое).

Поэтому тут единственный гарантированный способ: использовать средства ОС за которыми она следит:
1. Самое универсальное: держать открытым файл, при закрытии процесса виндовс его сам закроет, даже при выключении компа.
2. если в пределах одного компа, то использовать объекты ядра виндовса, на что была ссылка во втором посте.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486731
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блондиночка - админу:
- Стасик, как с помощью FoxPro узнать состояние розетки соседнего компьютера, ужас как приспичило?
Хит сезона.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486833
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, как надоела демагогия некоторого товарища, который нам не товарищ... Нельзя даже поговорить по существу...
Все это действительно так, либо простой механизм, либо сложный через апи.... Если принятие решения нельзя доверить компьютеру, решение должен принять сам человек... Вот такой вариант.. Записывать в файл кто монопольно открыл этот файл и время, при следущем входе, если файл не удалился при аварийном выходе, посмотреть разницу по времени, если составляет больше например 10 часов :-), можно смело удалить, иначе выдать сообщение такой-то товарищ монополизировал этот файл, он на работе ?(Да-Нет), ну и дальнейший анализ, это муж. или женщ.(если Ж и блнд можно смело удалять) и т.д. :-)
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486854
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1иначе выдать сообщение такой-то товарищ монополизировал этот файл, он на работе ?(Да-Нет), ну и дальнейший анализкороче, опять "зовите программиста"
единственное улучшение - теперь не программист, а пользователь может решать, что делать
впрочем, улучшение ли это, ещё вопрос :)
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486860
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Все это действительно так, либо простой механизм, либо сложный через апи.... Если принятие решения нельзя доверить компьютеру, решение должен принять сам человек...
Через апи несложно, просто непривычно если работаешь только с фоксом.
Через файлы элементарно. Как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
local lcFileFlag, llWork, lnHWork
lcFileFlag = JustPath(sys(16, 0)) + 'IsWork.flg'
llWork = file(lcFileFlag)
lnHWork = fcreate(lcFileFlag)
if lnWork < 0
     ? 'программа уже запущена'
else
   if llWork
     ? 'предыдущий запуск завешен некорректно'
   endif
   ... тут полезный код

   && перед выходом
   fclose(lnHWork)
   delete file (lcFileFlag)
endif


Можно создать для этих целей DBF и при входе блокировать (RLOCK()) свою запись. Так универсальнее, каждый пользователь блокирует свою запись, а если потребовался монопольный доступ, то блокируем всю таблицу (FLOCK()).

PS По-хорошему не надо писать проги которые ограничивают пользователя одной запущенной копией. Например работает он в одной, тут требует срочно сделать что-то другое: запустил вторую копию, сделал, закрыл и продолжает работать в первой.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486871
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, надо ещё проверить не считает ли сервер этот файл открытым и заодно проверить владельца этого файла-флага, можно продолжать бесконечную цепочку проверок... а где оптимальное "цена качество"... :-)
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486898
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Да, надо ещё проверить не считает ли сервер этот файл открытым
Не надо. Этим виндовс занимается самостоятельно.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486925
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Блин, как надоела демагогия некоторого товарища, который нам не товарищ... Нельзя даже поговорить по существу...


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

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

Поэтому порой и жаль некоторых новичков, которые наивно уверены, что на подобных советах десятилетней давности
они учатся программировать и напрасно тратящих на это свое время.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486938
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы не хотел тут мериться.., но меня просто улыбнуло... Вам необходимо самоутведиться..:-) пжлста Dbase III+ инертность мышления, модульность, в классах небходимость пока не возникала...:-) В данный момент пишу отчет по БЭСТ :-)
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486948
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Я бы не хотел тут мериться.., но меня просто улыбнуло... Вам необходимо самоутведиться..:-) пжлста Dbase III+ инертность мышления, модульность, в классах небходимость пока не возникала...:-) В данный момент пишу отчет по БЭСТ :-)

Мериться не надо, размер у вас не тот.
А БЭСТ настолько дремучая древность, что лучше бы вам этим не гордиться.
Вас просто жаль, нашли на что пол-жизни потратить.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38486999
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это у кого какой менталитет, я например с уважением смотрю на программистов ведущих бухгалтерию на PL/1 :-), А кларион вам знаком, на которм написана задача сдачи отчетности в ПФР, которая актуальна и поныне.. А вопрос в этой ветке форума уже риторический "Покажите, что вы сделали..." :-)

PS: Я сожалею, что ввязался в дискуссию...
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487011
9IKOB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в решении проблемы запуска на одном компьютере нескольких экземпляров приложения в ФоксКлубе существует большой минус - если предложенный код проверки запуска приложения добавить в разные приложения, то он не позволяет запустить одновременно эти разные приложения с одним кодом проверки запуска. В этом я убедился на практике.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487035
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Это у кого какой менталитет, я например с уважением смотрю на программистов ведущих бухгалтерию на PL/1 :-), А кларион вам знаком, на которм написана задача сдачи отчетности в ПФР, которая актуальна и поныне.. А вопрос в этой ветке форума уже риторический "Покажите, что вы сделали..." :-)

PS: Я сожалею, что ввязался в дискуссию...

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

А смысл дискуссии простой - я ДимеТ и ВладимируМ дал ссылку на статью в хелпе в ответ на их запросы.
Не сомневаюсь, что они туда заглядывали.
Но сложилось впечатление, что они ничего там не поняли ...
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487138
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12я ДимеТ и ВладимируМ дал ссылку на статью в хелпеПервое упоминание о ссылке - тут 15215332 . Но выше никаких ссылок нет. Есть только цитата (причём даже не оформленная как цитата, ну это мелочи).
sg12Могу я на него взглянуть?А мы можем на ваш код взглянуть? :)
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487152
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМкоторый искренне заблуждается. Показал в чем ошибочность выбранного способа решения
... встает вопрос администрирования доступа
Решение с открытым файлом-флажком в общем случае НЕ ошибочно, т.к. легко допиливается до любого необходимого уровня функциональности и прекрасно работает. И сессии одной программы позволяются и различаются, и разные программы не конфликтуют, и не требуется никакого администрирования под любыми ОС. Чтоб не быть голословным:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
* код при старте приложения
if version(2)=0   &&  runtime
   local cTemp, aFiles[1,1], i, lDblRun, lCrash, iDscr

   cTemp = addbs(getenv("Temp"))
   lDblRun = .f.    && признак повторного запуска
   lCrash = .f.     && признак аварийного завершения
   for i=1 to adir(aFiles, cTemp+this.AppLabel+"*.run")
      iDscr = fopen(cTemp+aFiles[i,1],2)
      if iDscr>0
         lCrash = True
         fclose(iDscr)
         erase (cTemp+aFiles[i,1])
      else
         lDblRun = True
      endif
   endfor

   if lCrash
      messagebox("Один из предыдущих сеансов работы программы завершен аварийно!"+CR+;
         "При повторении подобных ситуаций обратитесь в отдел ИТ"), PICT_WARN, MSG_WARN)
   endif
   if lDblRun
      messagebox("Программа уже запущена на Вашем компьютере!", PICT_WARN, MSG_WARN)
   endif

   this.RunFile = cTemp+this.AppLabel+sys(2015)+".run"
   this.RunFileDscr = fcreate(this.RunFile)
   if this.RunFileDscr<=0
      messagebox("Невозможно создать регистрационный файл!", PICT_ERR, MSG_ERR)
      return .f.
   endif
endif



Код: sql
1.
2.
3.
4.
5.
6.
7.
* код при закрытии приложения
if this.RunFileDscr>0
   fclose(this.RunFileDscr)
endif
if !empty(this.RunFile)
   erase (this.RunFile)
endif
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487185
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XAndy, да, можно, кто же спорит. Тут просто дело в том, что файл-то можно "держать" монопольно, и за этим следит даже не программа, а сама ОС. И при нештатном завершении программы сама же ОС, а вовсе не программа, "освобождает" этот файл. И вот как раз это и можно использовать.
А нам тут рассказывают про save to/restore from, которые только при работающей программе работают, извините за тавтологию. Т.е. "2 проверки" не сработают по той простой причине, что save/restore дают нам способ сделать только одну проверку - "а что же там в файле хранится", т.е. "а не покрашились ли мы в прошлый раз". Вторую проверку - "а можно ли туда чего нового записать в данный момент"/"а созданы ли эти данные другой копией нашей программы" - этим инструментом, увы, не провести.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487980
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
9IKOBКстати, в решении проблемы запуска на одном компьютере нескольких экземпляров приложения в ФоксКлубе существует большой минус - если предложенный код проверки запуска приложения добавить в разные приложения, то он не позволяет запустить одновременно эти разные приложения с одним кодом проверки запуска. В этом я убедился на практике.
Так немного допили его под свои нужды. Там именованный мьютекс, задай свое имя и будут твои проги работать независимо друг от друга. Как-то так например:
Код: sql
1.
lcApplicationName = JustStem(sys(16, 0))
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38487984
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12А смысл дискуссии простой - я ДимеТ и ВладимируМ дал ссылку на статью в хелпе в ответ на их запросы.
Ссылку ты не дал, но вот она , сам сходи по ней.
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38488084
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Dima Tпропущено...

Правильно, ни один уважающий себя тролль не будет подтверждать свой словесный понос примерами кода

Посклочничать вам опять охота, засиделись ...
...
Рейтинг: 0 / 0
Один экземпляр приложения.
    #38488365
9IKOB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТак немного допили его под свои нужды. Там именованный мьютекс, задай свое имя и будут твои проги работать независимо друг от друга. Как-то так например:
Код: sql
1.
lcApplicationName = JustStem(sys(16, 0))


Благодарю!
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Один экземпляр приложения.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]