我创建了一个c#windows服务 当我将我的visual studio置于调试模式并运行它时,它可以正常工作 但是当我创建并安装它时,它不起作用(意味着服务正确安装并启动,但我的代码没有运行)。 (我建立了这样的设置https://support.microsoft.com/en-us/kb/816169) 这是我的代码: 这是我的代码:dropbox.com/s/eq13fng88gk714u/myTelephone.zip?dl=0
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
#if DEBUG
myTelephone myService1 = new myTelephone();
myService1.onDebug();
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
#else
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new myTelephone()
};
ServiceBase.Run(ServicesToRun);
#endif
}
和
public partial class myTelephone : ServiceBase
{
public myTelephone()
{
InitializeComponent();
} public void onDebug()
{
OnStart(null);
}
protected override void OnStart(string[] args)
{
//////save some data in sql server
}}
答案 0 :(得分:0)
你有没有想过在问之前谷歌这个?
无论如何,只需通过nuget使用Topshelf。这样,您总是在调试时和安装时执行相同的代码。
答案 1 :(得分:0)
由于除了'它不起作用'之外你没有提供任何东西,我会试着假设:
要么在方法中请求额外的时间:
// request additional 4 seconds for the start-up process
this.RequestAdditionalTime(4000);
或将访问SQL数据库的代码移出方法,例如,创建一个新线程并在那里完成所有员工。
答案 2 :(得分:-1)
我认为您正在尝试通过clickicg exe文件安装它。这是不正确的。 尝试下一步:
打开cmd
使用myTelephone.exe
运行下一个
sc创建myTelephone binpath =“myTelephone.exe”start = auto
net start myTelephone
或者您也可以添加到预构建事件:
net stop $(ProjectName)
sc delete $(ProjectName)
exit /b 0
作为后期制作活动:
sc create $(ProjectName) binpath= "$(TargetPath)" start= auto
net start $(ProjectName)
在每个版本中,您都将安装服务。