2013-01-25 2 views
4

Skype 클라이언트와 상호 작용할 수있는 Windows 서비스를 만들려고했습니다.Skype 클라이언트와 Windows 서비스를 연결하지 못했습니다.

SKYPE4COM.DLL lib를 사용하고 있습니다.

간단한 콘솔을 만들거나 win32 응용 프로그램을 만들면 모두 정상적으로 작동합니다 (이 응용 프로그램에 대한 Skype 요청이있어 제대로 작동 함). 나는 서비스로 을이 응용 프로그램을 실행하려고 할 때 나는 오류

Service cannot be started. System.Runtime.InteropServices.COMException (0x80040201): Wait timeout. 
at SKYPE4COMLib.SkypeClass.Attach(Int32 Protocol, Boolean Wait) 
at Commander.Commander.OnStart(String[] args) 
at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state) 

을 그리고 스카이프에 연결하는 과정에 대한 알림이 없습니다.

Skype 클라이언트에 서비스를 연결하는 방법을 조언하거나 내 Skype 설정을 변경해야합니까?

+0

해결책을 찾았습니까? 로깅 된 스카이프 클라이언트로 서비스를 실행 해 보았습니까? (가능합니까?) – Saint

답변

0

Windows 사용자 ID 보안 제한으로 인해 불가능하다고 생각합니다. Skype와 동일한 사용자로 애플리케이션을 실행해야합니다. 그렇지 않으면 첨부 할 수 없습니다.

0

나는 동일한 문제가있었습니다. Windows 응용 프로그램으로 변환하여 시스템 트레이 응용 프로그램으로 사용하여 해결 :

[STAThread] 
static void Main() 
{ 
    Log.Info("starting app"); 

    //facade that contains all code for my app 
    var facade = new MyAppFacade(); 

    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 


    using (ProcessIcon icon = new ProcessIcon(facade)) 
    { 
     icon.Display(); 

     Application.Run(); 
    } 
} 

public class ProcessIcon : IDisposable 
{ 
    private readonly MyAppFacade facade; 
    private NotifyIcon ni; 

    public ProcessIcon(MyAppFacade facade) 
    { 
     this.facade = facade; 
     this.ni = new NotifyIcon(); 
    } 

    public void Display() 
    { 
     ni.Icon = Resources.Resources.TrayIcon; 
     ni.Text = "Skype soccer"; 
     ni.Visible = true; 

     // Attach a context menu. 
     ni.ContextMenuStrip = new ContextMenuStrip(); 

     var start = new ToolStripMenuItem("Start"); 
     start.Click += (sender, args) => facade.Start(); 
     ni.ContextMenuStrip.Items.Add(start); 

     var stop = new ToolStripMenuItem("Stop"); 
     stop.Click += (sender, args) => facade.Stop(); 
     ni.ContextMenuStrip.Items.Add(stop); 

     var exit = new ToolStripMenuItem("Exit"); 
     exit.Click += (sender, args) => Application.Exit(); 
     ni.ContextMenuStrip.Items.Add(exit); 
    } 

    public void Dispose() 
    { 
     ni.Dispose(); 
    } 
} 
관련 문제