Использование MAPI как сервис

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
smartlink
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 22.01.2004 (Чт) 6:51
Откуда: Tashkent

Использование MAPI как сервис

Сообщение smartlink » 29.09.2006 (Пт) 15:56

Хай пипл! :wink:
Описание: Имеется програмка, которая периодически проверяет почту и скачивает подходящие прикрепленные файлы с помощью MAPI...
Проблема: Запускается программа как сервис, при этом когда начинает проверять почту вылетает. Вот лог действий:
29.09.2006 13:42:11 Started
29.09.2006 13:43:11 Checking e-mail
29.09.2006 13:43:11 Warning, an error has occured: Unspecified Failure has occurred

Жирным выделено, то что выводит
Код: Выделить всё
Err.description

Я настроил запуск сервиса от имени юзера у которого Outlook Express работает, но программа не может правильно подлючиться. Хотя при обычном запуске (не как сервис), программа работает как надо...

Код: Выделить всё
Public Sub cmdSignOn_Click()
On Error GoTo EndEx
txtfile.Write (Date & " " & Time & " " & "Checking e-mail" & Chr(13))
'   MAPISession1.SignOn
    MAPISession1.Action = 1
   If Err <> 0 Then
           GoTo EndEx
    Else
        Screen.MousePointer = 11
        MAPIMessages1.SessionID = MAPISession1.SessionID
        MAPIMessages1.FetchUnreadOnly = 1
        MAPIMessages1.Action = 1

        Label2.Caption = Format$(MAPIMessages1.MsgCount) + " Messages"
        Timer1.Enabled = False
        cmdSaveattach_Click
       
        cmdSignOut_Click ' sign out immediately
       
        Timer1.Enabled = True
       
        Screen.MousePointer = 0
    End If
    Exit Sub
EndEx:

txtfile.Write (Date & " " & Time & " " & "Warning, an error has occured: " & Err.Description)
Shell_NotifyIcon NIM_DELETE, nid

End
End Sub



Может кто уже сталкивался с этой проблеммой :?:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 29.09.2006 (Пт) 16:02

в настройках сервиса укажи аккаунт, под которым будет работать данный сервис.

smartlink
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 22.01.2004 (Чт) 6:51
Откуда: Tashkent

Сообщение smartlink » 29.09.2006 (Пт) 16:04

Я указал Аккаунт, но безрезультатно :(

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 29.09.2006 (Пт) 16:20

а под данной юзеровской сессией этот сервис работает :?:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 29.09.2006 (Пт) 16:23

и проверь права на запись аттачментов, возможно у тебя проблема внутри твоей другой процедуры:

cmdSaveattach_Click

и еще, интерфейс для сервиса вообще не нужен,я бы даже сказал, что противопоказан.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.09.2006 (Пт) 16:33

Укажи, что твой сервис может взаимодействовать с рабочим столом.
Но реально эта опция требуется в очень редких случаях. Чаще всего, если для работы сервиса нужна эта опция, значит он спроектирован неправильно.
Lasciate ogni speranza, voi ch'entrate.

smartlink
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 22.01.2004 (Чт) 6:51
Откуда: Tashkent

Сообщение smartlink » 29.09.2006 (Пт) 16:41

и проверь права на запись аттачментов, возможно у тебя проблема внутри твоей другой процедуры:

cmdSaveattach_Click


До этой строки даже не доходит, вываливается при выплнении
Код: Выделить всё
MAPISession1.Action = 1

С правами все в порядке.
и еще, интерфейс для сервиса вообще не нужен,я бы даже сказал, что противопоказан.
Как понять? не понял о чем мысль... Если имеется в виду интерфейс программы, то она нужна. Мне необходимо чтоб программа автоматом запускался, вдруг свет отключили или еще чего-нибудь. Возможно в реестре можно прописать авт. запуск, но тогда можно ли запустить программу от имени того пользователя у которого уже настроен Outlook Express и чтоб в процессе висела???[/quote]

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 29.09.2006 (Пт) 16:46

как ты запускаешь(инсталлируешь) свой сервис?

Мне необходимо чтоб программа автоматом запускался, вдруг свет отключили или еще чего-нибудь. Возможно в реестре можно прописать авт. запуск, но тогда можно ли запустить программу от имени того пользователя у которого уже настроен Outlook Express и чтоб в процессе висела???


может у тебя и не сервис вообще 8)

smartlink
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 22.01.2004 (Чт) 6:51
Откуда: Tashkent

Сообщение smartlink » 30.09.2006 (Сб) 11:01

Konst_One
Пользуюсь этим: SRVANY.EXE
Которая позволяет:
applications as services. The benefits include:
- allow apps to survive logoff/logon sequences, hence saving the overhead of re-starting them for each new user
- allow server apps to come-up and service requests even when no user is logged-on
- allow apps to run and perform a task in a specific logon account, different from the currently logged-on user


А запускаю как обычно через консоль Службы :wink:[/u]

smartlink
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 22.01.2004 (Чт) 6:51
Откуда: Tashkent

Сообщение smartlink » 30.09.2006 (Сб) 11:04

alibek

Сейчас проверю и скажу ответ...

smartlink
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 22.01.2004 (Чт) 6:51
Откуда: Tashkent

Сообщение smartlink » 30.09.2006 (Сб) 12:19

:( нет, не получилось

Еще есть идеи???

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 01.10.2006 (Вс) 18:49

А почему у тебя логин закомментирован :?:

Код: Выделить всё
'   MAPISession1.SignOn
    MAPISession1.Action = 1

smartlink
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 22.01.2004 (Чт) 6:51
Откуда: Tashkent

Сообщение smartlink » 01.10.2006 (Вс) 19:11

Konst_One

object.Action [ = value ]

Constant Value Description

mapSignOn 1 Log user into account
mapSignOff 2 End messaging session


можно использовать MAPISession1.SignOn или MAPISession1.Action = 1, действует одинаково

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 02.10.2006 (Пн) 11:55

так все-таки, под той юзеровской сессией , что ты задал в настройках сервиса, у тебя работает нормально :?:

smartlink
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 22.01.2004 (Чт) 6:51
Откуда: Tashkent

Сообщение smartlink » 05.10.2006 (Чт) 14:33

Konst_One

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


Пробовал использовать:

Код: Выделить всё
MAPISession1.UserName = ...
MAPISession1.Password = ...


результат NULL :(

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 05.10.2006 (Чт) 14:49

а собственно GUI у тебя как открывается? Ведь контрол MAPISession у тебя в форме висит, так. Если ты не открываешь юзеровскую сессию (не делаешь логин под юзеровским аккаунтом) и у тебя в сервисе не стоит галка , чтобы сервис мог взаимодействовать с десктопом, да еще если ты форму не открываешь на экран, то естественно получение такой ошибки.

Я бы такой сервис делать бы не стал, не имеет смысла он. Проще запускать обычное приложение и вешать его в трей при старте.

smartlink
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 22.01.2004 (Чт) 6:51
Откуда: Tashkent

Сообщение smartlink » 05.10.2006 (Чт) 15:11

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

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 05.10.2006 (Чт) 15:30

тогда настрой автологон под нужным юзером для операционки (любым твикером или прямо в реестре), а свою прогу в StartUp засунь и все дела 8)

smartlink
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 22.01.2004 (Чт) 6:51
Откуда: Tashkent

Сообщение smartlink » 05.10.2006 (Чт) 16:16

не был бы серваком, я давно это сделал бы... :wink:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 05.10.2006 (Чт) 16:19

вижу только один вариант - это все переписать через MAPI без использования ActiveX Controls.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 05.10.2006 (Чт) 16:21


Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 05.10.2006 (Чт) 16:31

Это к тому, что можно их (контролы) и без формы запустить, если организовать класс и сделать позднее связывание и объявить через Object.


The program failed!!! The "Set MAPISession3 = MAPISession1" produced a type error. There are some examples of how to compile a form in a dll, then reference ActiveX controls from the form. However, a "form" is explicitly a UI and does not belong in a dll (IMO). This issue is related to the fact that ActiveX controls require a valid "Control Container", which a "class object" is not. To solve this problem, VB6 allows ‘late binding’ to OCX controls for use. This fact is significant in and by itself!

To late bind the MAPI ActiveX control:

Код: Выделить всё
Set objSession = CreateObject("MAPI.SESSION")


Additionally, you can late bind the CDO control for use in a class object:

Код: Выделить всё
Set mail = CreateObject("CDONTS.NewMail.1")


Having the MAPI object created successfully, I put the previous code in place and ran the program. Again, the program failed. Creating the object within the class exposes a different set of properties and methods. The following code allows the creation of a MAPI object and sends the mail. NOTE: the difference in properties between the VB form OCX and the late bound object.

Код: Выделить всё
Call MapiClass.blnSendMail("burnettm@hotmail.com", "burnettm@hotmail.com", "MAPI mail", "MAPI mail is functional", "Matt")


Код: Выделить всё
Public Function blnSendMail (strTo As String, strFrom As String, strSubject As String, _

strBody As String, pName As String) As Boolean

On Error Resume Next

Dim objSession As Object 'MAPI.Session

Dim objMessage As Object 'MAPI.Message

Dim objRecip As Object 'MAPI.Recipient

Set objSession = CreateObject("MAPI.SESSION")

objSession.Logon ProfileName:=pName, showDialog:=False

Set objMessage = objSession.Outbox.Messages.Add

objMessage.Subject = strSubject

objMessage.Text = strBody

Set objRecip = objMessage.Recipients.Add

objRecip.Name = strTo

objRecip.Type = 1 ' 1 is the value of the "mapiTo" constant.

objRecip.Resolve

objMessage.Update

objMessage.Send showDialog:=False

objSession.Logoff

If Err.Number <> 0 Then

blnSendMail = False

Else

blnSendMail = True

End If

End Function


This class function will send email using the remote Exchange server referred to in the Inbox profile.

smartlink
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 22.01.2004 (Чт) 6:51
Откуда: Tashkent

Сообщение smartlink » 06.10.2006 (Пт) 7:22

спасибо за инфу, обрадовали :D я просмотрю обязательно


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 54

    TopList