2013-01-25 48 views
4

我試圖創建一個允許與Skype客戶端進行交互的Windows服務。未能通過Skype4COM將Skype服務附加到Skype客戶端

我正在使用SKYPE4COM.DLL庫。

當我創建一個簡單的控制檯或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客戶端或者我可能需要更改我的Skype設置?

+0

您是否找到解決方案?您是否嘗試使用登錄的Skype客戶端運行服務(是否有可能?) – 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(); 
    } 
} 
相關問題