AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Прочие вопросы
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.12.2005, 16:44   #1  
luc is offline
luc
Участник
 
12 / 10 (1) +
Регистрация: 09.04.2004
Можно ли программно завершить работу MS Navision изнутри?
Если кто сталкивался с этим, подскажите.
Старый 23.12.2005, 16:59   #2  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
4-ку можно. Может быть можно и более ранние версии - не пробовал.
Механизм очень простой - неконтролируемое переполнение стека. Если использовать правильно - вещь вполне безопасная.

Код прилагаю
Вложения
Тип файла: rar Closing_Navision.rar (2.5 Кб, 278 просмотров)
Старый 15.07.2008, 09:50   #3  
Control is offline
Control
Участник
Аватар для Control
 
15 / 11 (1) +
Регистрация: 29.01.2008
Цитата:
Сообщение от tyrex Посмотреть сообщение
4-ку можно. Может быть можно и более ранние версии - не пробовал.
Механизм очень простой - неконтролируемое переполнение стека. Если использовать правильно - вещь вполне безопасная.

Код прилагаю
А в 5-рке не работает, я правильно понимаю ?
Старый 26.12.2005, 16:01   #4  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Talking
Только что придумал и протестировал (как грамотно убить себя или Мюнхаузен навегда):

1. Создаем батник и кладем его например в корень диска С (например, С:\test.bat)
2. В батнике пишем TASKKILL /IM finsql.exe
3. В нужном месте в Nav создаем переменную BATnik типа Automation 'Microsoft Shell Controls And Automation'.Shell
4. Пишем код:
CREATE(BATnik);
BATnik.Open('c:\test.bat');

Вышибает на раз. Если, конечно, у вас не открыто окно из-за которого "...приложение не может быть закрыто". Хотя для этого можно попробовать форсированный метод.
Остается вопрос сколько finsql убьет этот батник. (полагаю, что все, которые найдет)

А вобще, можно не извращаться а написать так :

SHELL('TASKKILL /IM finsql.exe');

Собственно все. Делает точно то же что и вышеуказанные махинации
Старый 27.12.2005, 10:05   #5  
Hed is offline
Hed
Участник
Аватар для Hed
 
13 / 10 (1) +
Регистрация: 04.02.2005
Только возникает проблема, когда открыто несколько клиентов Navision и надо закрыть тот, в котором этот код вызван.

При помощи глюка, закрыть Navision всегда можно. И для каждой версии есть свой набор глюков
Старый 26.02.2006, 14:54   #6  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
Придумал еще один способ:

Код:
//wndHost :'Windows Script Host Object Model'.WshShell
CREATE(wndHost);
wndHost.SendKeys('%{F4}');
Старый 27.05.2009, 14:35   #7  
Lrundom is offline
Lrundom
Участник
 
76 / 10 (1) +
Регистрация: 24.08.2007
Цитата:
Сообщение от tyrex Посмотреть сообщение
Придумал еще один способ:

Код:
//wndHost :'Windows Script Host Object Model'.WshShell
CREATE(wndHost);
wndHost.SendKeys('%{F4}');
А каким образом использую данный метод заблокировать компьютер? Ну например, программно вызвать нажатие Wid+L?
Старый 04.10.2010, 15:48   #8  
Dadakhan is offline
Dadakhan
Участник
 
26 / 10 (1) +
Регистрация: 30.05.2007
Пожалуй найден еще один способ закрытия Navision.

Создаете новую форму с названием closenav. Ставите свойство MaximizedOnOpen = Да, и код на
Form - OnOpenForm()
SHELL (text1,'/F /FI "WINDOWTITLE eq ' + COMPANYNAME + ' - Microsoft Dynamics NAV - [closenav]"');

, где text1 путь к папке system32\, чтобы нав не задавал лишних вопросов.
Старый 04.10.2010, 21:28   #9  
Dadakhan is offline
Dadakhan
Участник
 
26 / 10 (1) +
Регистрация: 30.05.2007
Цитата:
Сообщение от Dadakhan Посмотреть сообщение
Пожалуй найден еще один способ закрытия Navision.

Создаете новую форму с названием closenav. Ставите свойство MaximizedOnOpen = Да, и код на
Form - OnOpenForm()
SHELL (text1,'/F /FI "WINDOWTITLE eq ' + COMPANYNAME + ' - Microsoft Dynamics NAV - [closenav]"');

, где text1 путь к папке system32\, чтобы нав не задавал лишних вопросов.
поправка
, где text1 путь к папке system32\taskkill.exe
Старый 26.02.2006, 15:04   #10  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
tyrex в очередной раз меня удивил .

Тока по F4 закрывается если нет модальных окон а вот с переполнением в любом случае .
__________________
Want to believe...
Старый 26.02.2006, 15:17   #11  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
Ну хорошо, хотите с модальными окнами - пожалуйста :-)

Код:
CREATE(wndHost);
FOR i:=1 to 100 DO
   wndHost.SendKeys('{ESC}');
wndHost.SendKeys('%{F4}');
Старый 26.02.2006, 15:21   #12  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
ну ето по любому респект... хотя и сам уже эксперементирую с этой штукой. В том числе запускаю менюшки программно .
__________________
Want to believe...
Старый 16.05.2006, 10:14   #13  
bird_imported is offline
bird_imported
Участник
 
45 / 10 (1) +
Регистрация: 11.05.2006
Всем привет, Лорду одназначно респект.
Хочу предложить еще один вариант - писал его года два назад для той же цели.
Это маленькая библиотечка с одним единственным методом "CloseApp"
У метода два параметра:
1. Текст, отображаемый пользователю при завершении приложения
2. Выводить пользователю сообщение или нет
Чтобы использовать его в Nav нужно:
1. зарегистрировать библиотеку в системе
2. добавить переменную типа Automation 'NewLineOCXs'.Class1
3. добавить в нужное место стандартный код -
CREATE(имя_переменной);
имя_переменной.CloseApp(Хватит работать!',TRUE);
Вложения
Тип файла: rar NavClose.rar (3.0 Кб, 169 просмотров)
Старый 14.07.2006, 15:26   #14  
e-statik is offline
e-statik
Участник
 
102 / 11 (1) +
Регистрация: 06.07.2005
Немного не в тему, но зачем переменная №2 ?
Ведь достаточно в библиотеке чиркануть что-то вроде IF MessageStr <> '' Then ...
Старый 16.07.2006, 22:29   #15  
bird_imported is offline
bird_imported
Участник
 
45 / 10 (1) +
Регистрация: 11.05.2006
Цитата:
Сообщение от e-statik Посмотреть сообщение
Немного не в тему, но зачем переменная №2 ?
Ведь достаточно в библиотеке чиркануть что-то вроде IF MessageStr <> '' Then ...
Да случаи разные бывают
Например, чтобы вывести пустое сообщение
А еще текст сообщения можно зашить в константе, с ML и делать:

имя_переменной.CloseApp(Text50000, выражение_boolean);

Надеюсь, что синтаксис функции не слишком напрягает и замечание не принципиальное?
Старый 15.07.2008, 18:16   #16  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
Все прекрасно работает
Старый 16.07.2008, 12:03   #17  
Control is offline
Control
Участник
Аватар для Control
 
15 / 11 (1) +
Регистрация: 29.01.2008
Вы знаете, всё же не работает. Ошибку выдаёт о переполнении стека, но NAV не закрывает.

PS 5.0 SP1
Старый 16.07.2008, 14:37   #18  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Цитата:
Сообщение от Control Посмотреть сообщение
Вы знаете, всё же не работает. Ошибку выдаёт о переполнении стека, но NAV не закрывает.

PS 5.0 SP1
Подтверждаю для 5.0 SP1 - 1 способ
__________________
Want to believe...
Старый 16.07.2008, 15:22   #19  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
У меня нет под рукой 5.0 SP1.
Будем думать как решить вопрос
Старый 16.09.2008, 15:43   #20  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Выход из Nav 5.0


Form - OnModifyRecord() : Boolean
CurrForm.UPDATE;

При модификации записи в форме - вылет.
__________________
Want to believe...
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:26.