我尝试创建一个允许与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设置?
答案 0 :(得分:0)
我认为由于Windows用户标识安全限制,这是不可能的。您必须在与Skype相同的用户下运行您的应用程序,否则将无法附加。
答案 1 :(得分: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();
}
}