|
|
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
Всем привет, вот решил доработать VBS скрипт автообновлялки клиентской части. С целью избежания повторного запуска приложения если уже файл открыт делаю так: пробую скопировать новый файл под рабочим именем если ошибка значит файл открыт ... но вот в чем проблема клиентская часть растет и файл все больше и больше и с целю экономии трафика хочу копировать файл только после реального обновления дистрибутива на сервере. как проверить версию придумал. а вот как сделать контроль что локальный файл уже открыт чтоб не запускать повторно даже если кликнули по ярлыку второй и третий раз без попытки скопировать? getobject не катит так как он создает объект если файл не открыт. атрибуты не меняются винапи в VBS не доступны вроде сейчас VBS код примерно такой: http://kozin1.narod.ru/newsite/index.html?autoupdateclient.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 14:11:13 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
Try: Kill FilePath if Err<>0 Then ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 14:33:30 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
убивать не подойдет файл нужен. проверять на занятость надо при каждом запуске скрипта а не только когда копируется обновляется файл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 14:36:48 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
не хочешь убивать - тогда переименовывай туда-сюда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 14:43:47 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
Йесс, то что нужно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 14:52:59 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
только ты эта... осторожнее... переименовать или удалить он не даст, а вот скопировать поверх уже открытого файла другой с таким же именем - очень даже позволит. последствия непредсказуемы. я бы сделать попытку переименования первым же шагом, и если неудачно, значит немедленное катапультирование из скрипта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 14:57:56 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
АлексейКубивать не подойдет файл нужен. проверять на занятость надо при каждом запуске скрипта а не только когда копируется обновляется файл переименуй, смени атрибуты, передвинь и т.п. или убей ldb (не точно проинформирует о занятости, но о занятости аксессом или джетом) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 14:58:21 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
копировать поверх не дает - проверено пишет нет доступа у ADP нет LDB файла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 15:37:32 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
Чтобы мой ADE-ник юзера не могли запустить два раза я при запуске проверяю а не запущен ли он уже если запущен активирую первый,а второй завершаю(или не запускаю). Как условие "если уже файл открыт" ищу win окно с определенным заголовком только заголовок надо делать по возможности уникальным (например используя кавычки) ато возможны баги когда за прогу будет принята открытая для просмотра одноименная папка Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String _ ) As Long Private Declare Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long Public Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Public gHwnd As Long Private mm As String Private mFindStr As String Private chkFind As Boolean Public Const HWND_TOPMOST = -1 Public Const HWND_NOTOPMOST = -2 Public Const SWP_NOMOVE = &H2 Public Const SWP_NOSIZE = &H1 Public Const SWP_NOACTIVATE = &H10 Public Const SWP_SHOWWINDOW = &H40 'SetTitle strProjectName при старте установить условленный заголовок 'SetTitle "" при завершении сбросить '--Обновляет заголовок приложения Sub SetTitle(strPN As String) On Error Resume Next CurrentProject.Properties("AppTitle").Value = strPN Application.RefreshTitleBar End Sub Public Function EnumWindowsProc(ByVal hWnd As Long, ByVal lParam As Long) As Boolean Dim sSave As String, Ret As Long Dim I As Long Ret = GetWindowTextLength(hWnd) sSave = Space(Ret) GetWindowText hWnd, sSave, Ret + 1 If Len(Trim(sSave)) > 0 Then 'Debug.Print sSave & "-" & hwnd I = InStr(1, sSave, " - [") If I > 0 Then mm = Mid(sSave, 1, I - 1) If mm = mFindStr Then gHwnd = hWnd chkFind = True EnumWindowsProc = False Exit Function End If Else mm = sSave If mm = mFindStr Then mm = sSave gHwnd = hWnd chkFind = True EnumWindowsProc = False Exit Function End If End If End If EnumWindowsProc = True End Function Function IsLoadedPr(FindStr As String) As Boolean gHwnd = 0 chkFind = False mFindStr = FindStr Call EnumWindows(AddressOf EnumWindowsProc, 0) IsLoadedPr = chkFind End Function После в коде проверяеш If IsLoadedPr(strProjectName) Then если да значит приложение с таким заголовком запущено PS нормальные герои всегда идут в обход :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 16:11:34 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
Нормальные юзеры все равно сподобятся запустить приложение дважды например даблклик на кнопке таскбара могут и обе версии друг друга найти и выгрузиться в последней версии скрипта заложено сохранение времени последнего запуска и проверка - если таймаут меньше 5 сек то отмена загрузки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 16:37:35 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
>дважды например даблклик на кнопке таскбара не не получится одно успеет все равно раньше другое его найдет и завершится не устанавливая свой заголовок >могут и обе версии друг друга найти и выгрузиться Не не могут я же только после проверки заголовок устанавливаю на условный. баг может быть тока один приложение будет принимать за себя другое приложение если у него окажется такой-же заголовок (случай с одноименной папкой) для этого надо чуток уникальности добавить в строку например кавычек или имя юзера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 16:44:17 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
2 Latuk Два приложения запустятся (с небольшим интервалом) Заголовок у обоих еще не выставлен (т.к. проверка еще не прошла) Ни одно из них не найдет другого (т.к. заголовок еще не выставлен) Спокойно запустятся и дружно (с небольшим интервалом) выставят заголовок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 16:48:40 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
>Два приложения запустятся (с небольшим интервалом) Я пробовал запускать из bat файла подряд это гораздо меньший промежуток чем может сделать юзер одно успевало установить заголовок раньше чем другое начинало искать. хотя метод конечно не лишен недостатков. просто нашел ,скопировал ,проверил - работает и ладно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 16:54:44 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
Неправильная версия должна посылать юзера нах и отказатьсяя работать. в базе должно быть прописано, какя мнммальная версия требуется дла работы. верию приложения можно хранить в application.CurrentProject.Properties ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 16:56:36 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
Я пробовал запускать из bat файла подряд это гораздо меньший промежуток чем может сделать юзер хороший юзер может сделать то, что никакому bat'у и не снилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 16:59:52 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
А кто мешает использовать Windows API CreateMutex и не устаивать разборки с классическими "гонками" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 17:31:10 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
АлексейКкопировать поверх не дает - проверено пишет нет доступа у ADP нет LDB файла У меня дает и не спрашивает... Только потому 1-2 юзера (у тех, у кого он был в это время открыт) при следующем запуске кричат, что файл разрушен и не открывается. Я им вручную повторно копирую и ... все довольны. Хотя, конечно, я не прав... Но, блин, лень как Алексею искать пути-выходы. А м.б. это пока "петух жареный" не клюнул... И хай не клюется эта птица!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 17:44:24 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
Виталпри следующем запуске кричат, что файл разрушен и не открывается. кстати видел такой фокус на развалюшке c w98 которая не SR2 перестваили винду все стало работать Alexey Sh А кто мешает использовать Windows API CreateMutex и не устаивать разборки с классическими "гонками" ? видимо это единственный "правильный" способ. тока надо надо стандартный и красивый код написать чтоб можно его было быстренько вставить в автоекзек всех проектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 17:54:40 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
Применительно конкретно к АДП я бы задействовал автоматизацию и не стеснялся этого( если бы у меня дошли руки до такого скрипта) (Кажется) единственное ограничение по использованию - акцесс должен быть установлен в месте запуска. Код: (wsh 5.6) Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 20:30:40 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
конечно, Dim objApp As Access.Application читать как Dim objApp (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 20:31:57 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
2 Victosha первый вариант который я пробовал был именно такой правда был exe на VB написан недостатки: 1 запуск аксесса - гораздо дольше проверки файла 2 если файл закрыт на момент проверки то после завершения скрипта аксесс закрывается так как объект создан из разрушаемого. кстати в моем скрипте есть проверка на предмет установленности нужной версии аксесса (спасибо Хаммеру) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 09:48:43 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
АлексейК2 Victosha первый вариант который я пробовал был именно такой правда был exe на VB написан недостатки: 1 запуск аксесса - гораздо дольше проверки файла Я не смотрел внимательно зачем такой скрипт нужен. Кажется, что это не критично для скрипта, цель которого - сравнить локальную и удаленную версию и скопировать удаленную на локальный диск. Ну подними на старте собственный акцесс ( один ил идва глобальных на скрипт) и пользуй его. На последнем шаге просто сделай его видимым. Возможная проблема - пользователь скучает. Так добавь скрипту визуальности. Помести скрипт в hta и пусть он будет пускачем. А пока оно шеволится юзеру шары покатать на экране :)) АлексейК 2 если файл закрыт на момент проверки то после завершения скрипта аксесс закрывается так как объект создан из разрушаемого. <...> ((; В этой фразе я не понял слов. Если можно, поясни как это понимать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 10:02:14 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
- при незагруженности приложения скрипт обновляет файл и запускает приложение - если приложение просто свернуто то максимизирует его если объект создавать в скрипте то по завершению скрипта закроется и аксесс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 10:50:54 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
[quot АлексейК <...> если объект создавать в скрипте то по завершению скрипта закроется и аксесс[/quot] Видно я сегодня не выспался. Ну не понимаю я этого и всё тут. Куда он закроется и зачем. Конечно, допускаю, что я опять всего не помню, чего не знаю, но не до такой же степени... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 11:00:35 |
|
||
|
Проверить что файл ADP открыт аксессом
|
|||
|---|---|---|---|
|
#18+
2 АлексейК После выполнения скрипта или любого кода создающего объект (Аксес) этот объект не закроется, если он не будет закрыт в коде или в скрипте. Отсюда у многих возникает проблема - как закрыть Ексель... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 11:03:31 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32726478&tid=1671245]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 194ms |
| total: | 358ms |

| 0 / 0 |
