4

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 クライアントに接続する方法についてアドバイスをいただけますか、それとも Skype の設定を変更する必要があるのでしょうか?

4

2 に答える 2

0

Windows ユーザー ID のセキュリティ制限により、それは不可能だと思います。Skype と同じユーザーでアプリケーションを実行する必要があります。そうしないと、接続できません。

于 2013-03-05T17:35:49.720 に答える
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();
    }
}
于 2014-06-19T19:01:15.793 に答える