本文着重於WindowsServic如何調用API以及出現部分問題的解決方案
本文Windows Service 創建摘自JasperXu的博客 鏈接:http://www.cnblogs.com/sorex/archive/2012/05/16/2502001.html
C#創建Windows Service(Windows 服務)基礎教程
Windows Service這一塊並不復雜,但是注意事項太多了,網上資料也很凌亂,偶爾自己寫也會丟三落四的。所以本文也就產生了,本文不會寫復雜的東西,完全以基礎應用的需求來寫,所以不會對Windows Service寫很深入。
本文介紹了如何用C#創建、安裝、啟動、監控、卸載簡單的Windows Service 的內容步驟和注意事項。
一、創建一個Windows Service
1)創建Windows Service項目
2)對Service重命名
將Service1重命名為你服務名稱,這里我們命名為ServiceTest。
二、創建服務安裝程序
1)添加安裝程序
之后我們可以看到上圖,自動為我們創建了ProjectInstaller.cs以及2個安裝的組件。
2)修改安裝服務名
右鍵serviceInsraller1,選擇屬性,將ServiceName的值改為ServiceTest。
3)修改安裝權限
右鍵serviceProcessInsraller1,選擇屬性,將Account的值改為LocalSystem。
三、寫入服務代碼
1)打開ServiceTest代碼
右鍵ServiceTest,選擇查看代碼。
2)寫入Service邏輯
添加如下代碼:
四、創建安裝腳本
在項目中添加2個文件如下(必須是ANSI或者UTF-8無BOM格式):
1)安裝腳本Install.bat
第二行為啟動服務。
第三行為設置服務為自動運行。
這2行視服務形式自行選擇。
4)腳本調試
如果需要查看腳本運行狀況,在腳本最后一行加入pause
五、在C#中對服務進行控制
0)配置目錄結構
簡歷一個新WPF項目,叫WindowsServiceTestUI,添加對System.ServiceProcess的引用。
在WindowsServiceTestUI的bin\Debug目錄下建立Service目錄。
將WindowsServiceTest的生成目錄設置為上面創建的Service目錄。
生成后目錄結構如下圖
1)安裝
安裝時會產生目錄問題,所以安裝代碼如下:
/// <summary>
/// 安裝
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnInstall_Click(object sender, RoutedEventArgs e)
{
string CurrentDirectory = System.Environment.CurrentDirectory;
System.Environment.CurrentDirectory = CurrentDirectory + "\\Service";
Process process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = "Install.bat";
process.StartInfo.CreateNoWindow = true;
process.Start();
lblLog.Text = "安裝成功";
System.Environment.CurrentDirectory = CurrentDirectory;
}
卸載時也會產生目錄問題,所以卸載代碼如下:
代碼如下:
5)暫停/繼續
6)檢查狀態
六、需要在ServiceTest的APP.Config下配置如下信息
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="" connectionString="" providerName="System.Data.EntityClient" />//寫入地址等相關信息
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v12.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
七、總結
在發布編譯文件,並運行時,有時候會出現Stopping導致服務一直無法關閉,運行會直接報錯,此時需要你在進程中關掉服務之后,以管理員身份運行該運用程序