Fail to attach windows service with Skype4COM to Skype Client

4

I tried to create a windows service which will allow to interact with Skype Client.

I'm using SKYPE4COM.DLL lib.

When I create a simple console or win32 aplication all works ok (I have the Skype request for this application and it works well). But when I try to run this application as a service, I have an error

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)

And I have no notification about process connecting to Skype.

Can you give me an advice how to attach service to Skype client or maybe I need to change my Skype settings?

windows
api
service
skype
skype4com
asked on Stack Overflow Jan 25, 2013 by E-Max • edited Mar 4, 2013 by BrunoLM

2 Answers

0

I think it is not possible due to Windows User Id security restrictions. You have to run your application under the same user as Skype otherwise it won't be able to attach.

answered on Stack Overflow Mar 5, 2013 by frix
0

I had the same issue. Resolved it by converting it to Windows Application and using it as System Tray App:

[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();
    }
}
answered on Stack Overflow Jun 19, 2014 by Oleksii Aza

User contributions licensed under CC BY-SA 3.0