Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Работа как служба без логона / 19 сообщений из 19, страница 1 из 1
18.06.2009, 17:56
    #36049118
newalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
Имеется нехитрое приложение, утилитка которая архивирует файлики , там пишет лог, и потом после дела лог это отправляет . На залогниненной машине всё ок, а вот если запускать через nncron (планировщик) как службу, на незалогиненной машине доходит до момента
Код: plaintext
oSMTP=NEWOBJECT("smtpmail","smtpmail.prg")

и тишина висит процесс в памяти и ничего не делает :( , что надо сделать что бы класс образовался и отработал ?

спасибо!

____________________________
я не волшебник, я только учусь
...
Рейтинг: 0 / 0
19.06.2009, 17:51
    #36051485
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
Запуск все равно от имени какого-то пользователя происходит. По другому виндовс не умеет.
Есть подозрение что класс smtpmail использует почтового клиента по умолчанию, а у этого пользователя он не настроен.

Для проверки - зайди под тем пользователем под которым планировщик запускает, запусти руками свою прогу и посмотри что происходит.
...
Рейтинг: 0 / 0
19.06.2009, 22:45
    #36051820
AK-Shah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
Советую для отправки почты использовать библиотеку Владимира Кныра (через Winsock, те не требует установки какого-либо почтовика!). Подробности см. на forum.foxclub.ru, в разделе решения... или поиск по форуму. Пользуюсь, не жалею.
...
Рейтинг: 0 / 0
22.06.2009, 16:42
    #36054207
newalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
Спасибо! за ответы. smtpmail - класс который самодостаточен, вроде бы, я его в ехе скомпили и отсылает всё супер куда надо с указанием что да как там почтового сервера получателя и т.д. а вот когда не в логоне то не хочет запускается процесс и висит, даже непонятно что ему надо :) не нужен ему почтовый клиент он сам. да он именно через winsock :) оттуда даже наверно и взят :)
думаю уже от него отказаться и забирать логи из папки с машины которая всегда залогинена , что конечно пошло.

________________________________
я не волшебник, я только учусь
...
Рейтинг: 0 / 0
22.06.2009, 16:58
    #36054255
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
1. В винде процесс запускается всегда от имени какого-то юзера.

2. Если при запуске задача подвисает в процессах, то

2.1. выскакиевает интерфейсное окно (messagebox, wait window ....)
2.2. не хватает прав для выполнения (опять же модальный интерфейс)
...
Рейтинг: 0 / 0
22.06.2009, 17:07
    #36054286
newalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
Спасибо!
2PaulWist

по первому согласен :)

автор2.1. выскакиевает интерфейсное окно (messagebox, wait window ....)
2.2. не хватает прав для выполнения (опять же модальный интерфейс)


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

____________________________
я не волшебник, я только учусь
...
Рейтинг: 0 / 0
22.06.2009, 17:21
    #36054308
newalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
приложение запускается от пользователя с админскими правами :( единственно он никога не логинился на этом компе

_____________________________
я не волшебник, я только учусь
...
Рейтинг: 0 / 0
22.06.2009, 17:41
    #36054365
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
newalexесть какая нибудь возможность это увидеть?
Я уже предлагал выше: залогиниться под этим пользователем и запустить прогу. И сразу все увидишь.

newalexостанавливаются на строчке и всё
Эта строчка:
Код: plaintext
oSMTP=NEWOBJECT("smtpmail","smtpmail.prg")
Вызывает метод Init() класса smtpmail там и ищи строку на которой виснет.
...
Рейтинг: 0 / 0
22.06.2009, 17:45
    #36054372
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
Для чистоты эксперимента: залогиниться под пользователем под которым запускается задание и запустить задание, а не прогу напрямую.
...
Рейтинг: 0 / 0
22.06.2009, 18:06
    #36054407
newalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
так и сделал, залогинился под ним создал условия для запуска задания в ннкроне , прошло со свистом я даже окна не увидел всё пробежало :(, о а вот и файлик отчета по по почте пришел.
явно когда не в логоне возникает ошибка какая та а какая увидеть не могу, висит контуры окна чего там не видно!

___________________________
я не волшебник, я только учусь
...
Рейтинг: 0 / 0
22.06.2009, 18:16
    #36054422
newalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
ну точно висит окошко виден тока восклицательный знак сделать ничего не могу, окно убиваю прога дальше идёт но письмо не отправляет..

_____________________________
я не волшебник, я только учусь
...
Рейтинг: 0 / 0
22.06.2009, 19:20
    #36054522
Alexey-Ma
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
Хотелось выяснить с помощью какого механизма идет отсылка.
...
Рейтинг: 0 / 0
23.06.2009, 07:59
    #36054863
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
Попробуй этим классом отправлять. Точно работает без логина пользователя.
Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
DEFINE CLASS clssmtp AS custom
	*-- SMTP-server
	PROTECTED cserver
	cserver = ""
	PROTECTED clogin
	clogin = ""
	PROTECTED cpassword
	cpassword = .F.
	PROTECTED cmailfrom
	cmailfrom = ""
	PROTECTED clasterror
	clasterror = ""
	PROTECTED omsg
	omsg = .F.
	Name = "clssmtp"

	*-- Установка данных отправителя
	PROCEDURE setfrom
		lpara tcServer, tcLogin, tcPass, tcMailFrom
		this.cServer = tcServer
		this.cLogin = tcLogin
		this.cpassword = tcPass
		this.cMailFrom = tcMailFrom
	ENDPROC

	*-- Добавление файла
	PROCEDURE attachfile
		lpara tcFile
		local llOk
		if this.CreateMsg()
			Try
				this.oMsg.AddAttachment(tcFile)
				this.cLastError = ''
				llOk = .T.
			Catch To loError
				this.cLastError = loError.Message
			Finally
				*
			Endtry
		endif
		return llOk
	ENDPROC

	PROCEDURE send
		lpara tcTo, tcSubj, tcText
		local llOk
		if this.CreateMsg()
			Try
				with this.oMsg
			 		.To = tcTo
			 		.Subject = tcSubj
					.TextBody = tcText
			 		.TextBodyPart.Charset ="windows-1251"
			 		.TextBodyPart.ContentTransferEncoding ="quoted-printable"
			 		.Send()
			 	endwith
				this.cLastError = ''
				llOk = .T.
			Catch To loError
				this.cLastError = loError.Message
			Finally
				this.oMsg = .F.
			Endtry
		endif
		return llOk
	ENDPROC


	PROCEDURE getlasterror
		return this.cLastError
	ENDPROC


	PROTECTED PROCEDURE createmsg
		local lcSchema, llOk

		if vartype(this.oMsg) = 'O'
			llOk = .T.
		else
			Try
			 	this.oMsg = NewObject("CDO.Message")
			 	lcSchema = "http://schemas.microsoft.com/cdo/configuration/"
			 	with this.oMsg.Configuration.Fields
			 		.Item(lcSchema + "smtpserverport") =  25  && SMTP Port
			 		.Item(lcSchema + "sendusing") =  2  && Send it using port
			 		.Item(lcSchema + "smtpserver") = this.cServer && host of smtp server
			 		.Item(lcSchema + "smtpauthenticate") =  1  && Authenticate
			 		.Item(lcSchema + "sendusername") = this.cLogin && Username
			 		.Item(lcSchema + "sendpassword") = this.cPassword && Password
			 		.Update()
			 	endwith
				this.oMsg.From = this.cMailFrom
				this.cLastError = ''
				llOk = .T.
			Catch To loError
				this.cLastError = loError.Message
			Finally
				*
			Endtry
		endif
		return llOk
	ENDPROC


ENDDEFINE

Пользоваться так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
loSMTP = NewObject('clsSMTP')
loSMTP.SetFrom("smtp.mailserver.ru", "MyMailLogin", "Password", "От кого<MyMail@mailserver.ru>;")
...
if !loSMTP.Attachfile("c:\test.txt")
   ? "Не удалось приаттачить файл", loSMTP.GetLastError()
else
   if !loSMTP.Send("мыло получателя", "Тема письма", "Тело" + chr( 13 ) + chr( 10 ) + "письма")
      ? 'Не удалось отправить письмо', loSMTP.GetLastError()
   else
      ? 'Письмо ушло'
   endif
endif
...
Рейтинг: 0 / 0
23.06.2009, 09:56
    #36055017
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
newalexСпасибо!
2PaulWist

по первому согласен :)

автор2.1. выскакиевает интерфейсное окно (messagebox, wait window ....)
2.2. не хватает прав для выполнения (опять же модальный интерфейс)


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

____________________________
я не волшебник, я только учусь

В стартовом файле добавь строчки вывода в лог, если возникнет ошибка она запишется в log.txt.

У класса smtpmail есть некие фичи, вернее у почтовых серверов есть эти фичи которые данный класс не учитывает, поэтому возникают висяки при приёме почты.

Код: 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.
* Переопределение  On error
ON ERROR DO ErrHandler with PROGRAM(), LINENO(), ERROR(), MESSAGE()

SET SAFETY OFF 
SET ALTERNATE TO FULLPATH(CURDIR()) + 'log.txt' ADDITIVE
SET ALTERNATE ON
SET CONSOLE OFF
? '____________________________________________________________________ '
? 'Начало выполнения задания ', DATETIME(), SPACE( 6 ) ,SYS( 0 )
? '-------------------------------------------------------------------- '


PROCEDURE ErrHandler
	PARAMETERS tcProgram, tnLineNo, lnError, lcMessage
	LOCAL i
	?"Ошибка:"
	?"   Модуль   :", tcProgram
	?"   Строка   :", tnLineNo
	?"   Код      :", lnError
	?"   Сообщение:", lcMessage

	IF AERROR(laError) >  0 
		FOR m.i =  1  TO ALEN(laError)
		?'laError(1,' + ALLTRIM(TRANSFORM(m.i)) + ')', laError( 1 , m.i)
		ENDFOR 
		
	ENDIF 

Кстати, можно вполне надёжно тспользовать CDO.Configuration/CDO.Message - кода там всего строчек 20-ть.
...
Рейтинг: 0 / 0
23.06.2009, 10:48
    #36055124
newalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
Всем спасибо! буду пробовать.
Напишу. как и что получилось. :)

2PaulWist
я не вижу окна , тока контуры., но ошибку в текстовик кинуть мысль. сначала попробую более простой вариант отправки. :)

___________________________
я не волшебник, я только учусь
...
Рейтинг: 0 / 0
23.06.2009, 11:33
    #36055243
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
newalex
2PaulWist
я не вижу окна , тока контуры., но ошибку в текстовик кинуть мысль. сначала попробую более простой вариант отправки. :)

___________________________
я не волшебник, я только учусь

По любому если задача будет работать без интерфейсного окна, необходимо процесс выполнения писать в лог, иначе как потом будешь разбираться с ошибками.
...
Рейтинг: 0 / 0
23.06.2009, 12:08
    #36055346
newalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
это да, он и пишет по делу, собственно его я по почте и отправляю :) ну т.е. или сделал или нет основную задачу.. а утилита она работала и работало почта приходила и всё не задумовался что там ошибка может быть....

по поводу вышеуказанного класса когда настраиваю на серер провайдера выдаёт

Не удалось отправить письмоOLE IDispatch exception code 0 from ?: The message could not be sent to the SMTP server. The transport error code was 0x80040217. The server response was not available

кхм... почему?
...
Рейтинг: 0 / 0
23.06.2009, 12:16
    #36055371
newalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
Заработало в обычном режиме
в классе отменил обязательную аутентификацию и заработало!
теперь будем тестить в незалогиненом состоянии
_____________________________
я не волшебник, я только учусь
...
Рейтинг: 0 / 0
23.06.2009, 14:44
    #36055740
newalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа как служба без логона
Ну вроде всё заработало! Всем спасибо!

значится воспользовался предложенным классом, всё заработало. Вывод мой класс был слишком сложен и заморочен, что то там внутря у него не работало если не залогинен.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Работа как служба без логона / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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