1.创建Windows Service.打开VS2005.选择新建项目,然后选择Windows Service就可以创建一个Windows Service.
你可以创建一个Windows Service.设置它是自动启动的.那么它开机就会自动启动,当然安全模式就不会.
基本上,我想应该满足你的要求.因为大部分的软件是这么做的.
摘自MSDN:
若要创建功能性服务,必须至少:
设置 ServiceName 属性。
为服务应用程序创建必需的安装程序。
重写 OnStart 和 OnStop 方法并为其指定代码,以对服务的行为方式进行自定义。
创建 Windows 服务应用程序
创建一个“Windows 服务”项目。
注意
有关不使用模板编写服务的说明,请参见如何:以编程方式编写服务。
在“属性”窗口中,设置服务的 ServiceName 属性。
注意
ServiceName 属性的值必须始终与安装程序类中记录的名称匹配。如果更改此属性,则必须也更新安装程序类的
ServiceName 属性。
设置下列所有属性以确定服务的工作机制。
属性 设置
CanStop
True 指示服务将接受停止运行的请求;false 指示禁止停止运行服务。
CanShutdown
True 指示服务希望在运行该服务的计算机关闭时收到通知,以便能够调用 OnShutdown 过程。
CanPauseAndContinue
True 指示服务将接受暂停或继续运行的请求;false 指示禁止服务暂停运行和继续运行。
CanHandlePowerEvent
True 指示服务可以处理有关计算机电源状态更改的通知;false 指示禁止服务得到有关这些更改的通知。
AutoLog
True 表示在服务执行操作时将信息项写入应用程序的事件日志;false 表示禁用此功能。有关更多信息,请参见如何:记
录关于服务的信息。
注意
默认情况下,AutoLog 设置为 true。
注意
当 CanStop或 CanPauseAndContinue设置为 false 时,“服务控制管理器”会禁用相应的停止、暂停或继续服务的菜单选项
。
访问代码编辑器,并为 OnStart 和 OnStop 过程填写所需的处理。
重写其他所有要为其定义功能的方法。
添加服务应用程序所必需的安装程序。有关更多信息,请参见如何:将安装程序添加到服务应用程序。
通过从“生成”菜单中选择“生成解决方案”来生成项目。
注意
不要通过按 F5 来运行项目,不能以这种方式运行服务项目。
安装服务。有关更多信息,请参见如何:安装和卸载服务。
你可以创建一个Windows Service.设置它是自动启动的.那么它开机就会自动启动,当然安全模式就不会.
基本上,我想应该满足你的要求.因为大部分的软件是这么做的.
摘自MSDN:
若要创建功能性服务,必须至少:
设置 ServiceName 属性。
为服务应用程序创建必需的安装程序。
重写 OnStart 和 OnStop 方法并为其指定代码,以对服务的行为方式进行自定义。
创建 Windows 服务应用程序
创建一个“Windows 服务”项目。
注意
有关不使用模板编写服务的说明,请参见如何:以编程方式编写服务。
在“属性”窗口中,设置服务的 ServiceName 属性。
注意
ServiceName 属性的值必须始终与安装程序类中记录的名称匹配。如果更改此属性,则必须也更新安装程序类的
ServiceName 属性。
设置下列所有属性以确定服务的工作机制。
属性 设置
CanStop
True 指示服务将接受停止运行的请求;false 指示禁止停止运行服务。
CanShutdown
True 指示服务希望在运行该服务的计算机关闭时收到通知,以便能够调用 OnShutdown 过程。
CanPauseAndContinue
True 指示服务将接受暂停或继续运行的请求;false 指示禁止服务暂停运行和继续运行。
CanHandlePowerEvent
True 指示服务可以处理有关计算机电源状态更改的通知;false 指示禁止服务得到有关这些更改的通知。
AutoLog
True 表示在服务执行操作时将信息项写入应用程序的事件日志;false 表示禁用此功能。有关更多信息,请参见如何:记
录关于服务的信息。
注意
默认情况下,AutoLog 设置为 true。
注意
当 CanStop或 CanPauseAndContinue设置为 false 时,“服务控制管理器”会禁用相应的停止、暂停或继续服务的菜单选项
。
访问代码编辑器,并为 OnStart 和 OnStop 过程填写所需的处理。
重写其他所有要为其定义功能的方法。
添加服务应用程序所必需的安装程序。有关更多信息,请参见如何:将安装程序添加到服务应用程序。
通过从“生成”菜单中选择“生成解决方案”来生成项目。
注意
不要通过按 F5 来运行项目,不能以这种方式运行服务项目。
安装服务。有关更多信息,请参见如何:安装和卸载服务。
2.FileSystemWatcher.可以在1里面建立的Windows Service里面添加一个Timer控件来实现.在Timer控件的事件里面去写监控文件夹处理.其实传文件有很多种.你可以直接用WebClient传.也可以如下例子.转成字节数组.那么你想怎么加密都行.比如你可以在字节数组前后添加自己的头和尾标志字节,哈.然后用简单的调用方法传参传到服务器上.如果服务器是WebService.你可以异步调用执行.通过Callback,就是执行成功.就删除本地Txt文件.当然文件传到了WEB服务器就可以很简单的恢复为原来的文件.
public static byte[] File2Bytes(string filePath)
{
if(filePath.Trim() == String.Empty)
{
MessageBox.Show( "路径有误,请查证! ", "错误: ", MessageBoxButtons.OK,
MessageBoxIcon.Information);
return null;
}
else
{
/// 得到文件名,文件扩展名字
string fileNamePath = filePath.Trim();
string fileName = fileNamePath.Substring(fileNamePath.LastIndexOf( "\\ ") + 1);
// 要上传的文件
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
byte[] postArray = r.ReadBytes((int)fs.Length);
return postArray;
/// <summary>
///上传文件并返回服务器上的文件名
/// </summary>
/// <param name= "bytes "> 字节流 </param>
/// <param name= "fileName "> 客户端的文件名 </param>
/// <param name= "optFilePath "> 文件存放的服务器路径 </param>
/// <returns> 服务器上的文件名 </returns>
[AutoComplete]
public string LoadupFile(byte[] bytes, string fileName, ICMS.EnmOption optFilePath)
{
BS.SystemManage.Option option=new BS.SystemManage.Option();
string uriString = @option.OptionVal(optFilePath);
if(uriString.EndsWith( "\\ ") == false) uriString = uriString + "\\ ";
string fileNameExt = fileName.Substring(fileName.LastIndexOf( ". ") + 1);
DateTime dt = DateTime.Now;
string strDateTime = dt.ToString( "yyMMddHHmmss ");
string strMilsecond = dt.Millisecond.ToString();
fileName = strDateTime + strMilsecond + ". " + fileNameExt;
uriString = uriString + fileName;
try
{
WebClient myWebClient = new WebClient();
myWebClient.Credentials = CredentialCache.DefaultCredentials;
Stream postStream = myWebClient.OpenWrite(uriString, "PUT ");
if(postStream.CanWrite)
{
postStream.Write(bytes,0,bytes.Length);
}
else
{
throw new Exception( "文件目前不可写. ");
}
postStream.Close();
}
catch(WebException we)
{
throw new Exception(we.Message);
}
return fileName;
}
/// <summary>
///文件下载转成字节流
/// </summary>
/// <param name= "fileName "> 服务器上的文件名 </param>
/// <param name= "optFilePath "> 文件存放的服务器路径 </param>
/// <returns> 字节流 </returns>
[AutoComplete]
public byte[] DownLoadFile(string fileName, ICMS.EnmOption optFilePath)
{
BS.SystemManage.Option option=new BS.SystemManage.Option();
string uriString = @option.OptionVal(optFilePath);
string fileFullName = uriString + "\\ " + fileName.Trim();
if(!File.Exists(fileFullName))
{
return null;
}
else
{
// 得到服务器上要下载的文件流
FileStream fs = new FileStream(fileFullName, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
byte[] postArray = r.ReadBytes((int)fs.Length);
return postArray;
}
}
public static byte[] File2Bytes(string filePath)
{
if(filePath.Trim() == String.Empty)
{
MessageBox.Show( "路径有误,请查证! ", "错误: ", MessageBoxButtons.OK,
MessageBoxIcon.Information);
return null;
}
else
{
/// 得到文件名,文件扩展名字
string fileNamePath = filePath.Trim();
string fileName = fileNamePath.Substring(fileNamePath.LastIndexOf( "\\ ") + 1);
// 要上传的文件
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
byte[] postArray = r.ReadBytes((int)fs.Length);
return postArray;
/// <summary>
///上传文件并返回服务器上的文件名
/// </summary>
/// <param name= "bytes "> 字节流 </param>
/// <param name= "fileName "> 客户端的文件名 </param>
/// <param name= "optFilePath "> 文件存放的服务器路径 </param>
/// <returns> 服务器上的文件名 </returns>
[AutoComplete]
public string LoadupFile(byte[] bytes, string fileName, ICMS.EnmOption optFilePath)
{
BS.SystemManage.Option option=new BS.SystemManage.Option();
string uriString = @option.OptionVal(optFilePath);
if(uriString.EndsWith( "\\ ") == false) uriString = uriString + "\\ ";
string fileNameExt = fileName.Substring(fileName.LastIndexOf( ". ") + 1);
DateTime dt = DateTime.Now;
string strDateTime = dt.ToString( "yyMMddHHmmss ");
string strMilsecond = dt.Millisecond.ToString();
fileName = strDateTime + strMilsecond + ". " + fileNameExt;
uriString = uriString + fileName;
try
{
WebClient myWebClient = new WebClient();
myWebClient.Credentials = CredentialCache.DefaultCredentials;
Stream postStream = myWebClient.OpenWrite(uriString, "PUT ");
if(postStream.CanWrite)
{
postStream.Write(bytes,0,bytes.Length);
}
else
{
throw new Exception( "文件目前不可写. ");
}
postStream.Close();
}
catch(WebException we)
{
throw new Exception(we.Message);
}
return fileName;
}
/// <summary>
///文件下载转成字节流
/// </summary>
/// <param name= "fileName "> 服务器上的文件名 </param>
/// <param name= "optFilePath "> 文件存放的服务器路径 </param>
/// <returns> 字节流 </returns>
[AutoComplete]
public byte[] DownLoadFile(string fileName, ICMS.EnmOption optFilePath)
{
BS.SystemManage.Option option=new BS.SystemManage.Option();
string uriString = @option.OptionVal(optFilePath);
string fileFullName = uriString + "\\ " + fileName.Trim();
if(!File.Exists(fileFullName))
{
return null;
}
else
{
// 得到服务器上要下载的文件流
FileStream fs = new FileStream(fileFullName, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
byte[] postArray = r.ReadBytes((int)fs.Length);
return postArray;
}
}
3.利用Timer控件定时让Windows Service从Web服务器获取信息写到Client.
实现Windows Service自动更新.有一种方法可以用.不算最好的,不过是可行的.
你的Windows Service执行的功能操作写成一个dll.然后每次执行操作的时候是利用反射去动态加载执行的.
那么更新的话就可以直接从固定路径根据比对程序集的版本等.其他方法来判断是否有最新的程序集下载来更新.
实现Windows Service自动更新.有一种方法可以用.不算最好的,不过是可行的.
你的Windows Service执行的功能操作写成一个dll.然后每次执行操作的时候是利用反射去动态加载执行的.
那么更新的话就可以直接从固定路径根据比对程序集的版本等.其他方法来判断是否有最新的程序集下载来更新.