如何从Windows服务调用我的DLL?

时间:2012-02-25 00:50:55

标签: c# windows service file-monitoring

我创建了一个c#库文件,它将转到本地路径,例如(c:\ test.txt)找到该文件并上传到ftp服务器。

对于测试我刚刚从控制台应用程序调用了dll,但我如何作为Windows服务运行,这将继续运行?

我想运行这个dll作为监视c:\文件夹的服务,如果有任何文件像“test.txt”那样上传。

先谢谢

2 个答案:

答案 0 :(得分:5)

当您使用它的函数时,会“调用”DLL。因此,如果您的类项目中包含几个类和一些函数的DLL项目,只需add the DLL as a reference到您的服务项目并调用相应的函数。

您可能希望使用this library来创建Windows服务。原因是,当您使用Visual Studio模板构建Windows服务时,生成的构建不会真正“运行”。生成的版本是必须安装的Windows服务,然后是started using the Services Snap-In。但是使用Hoytsoft的自定义Windows服务库,您的服务将自动安装,然后自动启动 - 就像常规的Windows窗体应用程序一样。

要确保您的服务在启动时运行,请记住将Service类配置为AutoStart(如他的CodeProject文章中所述)。为了确保您的服务连续运行,即使进程被终止,您也可以添加这个方便的注册表hack,将重新启动服务标志设置为立即重新启动。

此注册表黑客== enter image description here

注册表黑客:

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\<YOUR_SERVICE_NAME_HERE>", true);
key.SetValue("FailureActions", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, Microsoft.Win32.RegistryValueKind.Binary);
key.Close();

了解任何管理用户仍然可以通过停用您的服务来终止您的流程。

答案 1 :(得分:0)

查看FileSystemWatcher课程以观察目录/文件的更改。