Windows服务创建及安装word转换成xpsWord格式.docx
- 文档编号:16188232
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:14
- 大小:365.73KB
Windows服务创建及安装word转换成xpsWord格式.docx
《Windows服务创建及安装word转换成xpsWord格式.docx》由会员分享,可在线阅读,更多相关《Windows服务创建及安装word转换成xpsWord格式.docx(14页珍藏版)》请在冰豆网上搜索。
User
由网络上特定的用户定义的帐户。
如果为ServiceProcessInstaller.Account成员指定User,则会使系统在安装服务时提示输入有效的用户名和密码,除非您为ServiceProcessInstaller实例的Username和Password这两个属性设置值。
ServiceInstaller安装一个类,该类扩展ServiceBase来实现服务。
在安装服务应用程序时由安装实用工具调用该类。
在这里主要修改其StartType属性。
此值指定了服务的启动模式。
Automatic
指示服务在系统启动时将由(或已由)操作系统启动。
如果某个自动启动的服务依赖于某个手动启动的服务,则手动启动的服务也会在系统启动时自动启动。
Disabled
指示禁用该服务,以便它无法由用户或应用程序启动。
Manual
指示服务只由用户(使用“服务控制管理器”)或应用程序手动启动。
在ProjectInstaller.cs代码里
publicProjectInstaller()
{
InitializeComponent();
this.Committed+=newInstallEventHandler(ProjectInstaller_Committed);
}
voidProjectInstaller_Committed(objectsender,InstallEventArgse)
System.ServiceProcess.ServiceControllercontroller=newSystem.ServiceProcess.ServiceController("
Service2"
);
//Service1为ServiceInstaller中ServiceName
controller.Start();
测试服务
在Service1.cs里面
•OnStart–控制服务启动
•OnStop–控制服务停止
protectedoverridevoidOnStart(string[]args)
FileStreamfs1=newFileStream(@"
d:
\mcWindowsService.txt"
FileMode.OpenOrCreate,FileAccess.Write);
StreamWriterm_streamWriter1=newStreamWriter(fs1);
m_streamWriter1.BaseStream.Seek(0,SeekOrigin.End);
m_streamWriter1.WriteLine("
测试OnStart"
+DateTime.Now.Date+"
\n"
m_streamWriter1.Flush();
m_streamWriter1.Close();
fs1.Close();
protectedoverridevoidOnStop()
测试OnStop"
+DateTime.Now.Date+"
打开MicrosoftVisualStudio2010—》VisualStudioTools—》VisualStudioCommandPrompt(2010)右键选择以管理员身份运行(A)。
找到word2xpsservice.exe所在的路径F:
\戴天赐\word2xpsservice\word2xpsservice\Bin
\Debug将下面的复制到VisualStudioCommandPrompt(2010)
installutil"
F:
/戴天赐/word2xpsservice/word2xpsservice/bin/Debug/word2xpsservice.exe"
。
可以在d:
\mcWindowsService.txt中看到上面的结果,服务这个可以使用。
卸载服务则installutil-u"
创建基于Timer的服务器任务
Timer组件是基于服务器的计时器,它使您能够指定在应用程序中引发Elapsed事件的周期性间隔。
然后可以操控此事件以提供定期处理。
例如,假设您有一台关键性服务器,必须每周7天、每天24小时都保持运行。
可以创建一个使用Timer的服务,以定期检查服务器并确保系统开启并在运行。
如果系统不响应,则该服务可以尝试重新启动服务器或通知管理员。
基于服务器的Timer是为在多线程环境中用于辅助线程而设计的。
服务器计时器可以在线程间移动来处理引发的Elapsed事件,这样就可以比Windows计时器更精确地按时引发事件。
System.Timers.Timertimer1=newSystem.Timers.Timer();
publicService1()
timer1.Interval=2000;
//SettheIntervalto2seconds(2000milliseconds).
timer1.Enabled=true;
timer1.Elapsed+=newSystem.Timers.ElapsedEventHandler(timer1_Elapsed);
timer1.Start();
voidtimer1_Elapsed(objectsender,System.Timers.ElapsedEventArgse)
测试Helloworld!
"
+DateTime.Now.ToString()+"
加上上面这段代码系统将会每隔2秒往d:
\mcWindowsService.txt添加一条"
语句。
创建读取xml文件路径信息对文件路径内的word转化成.xps文件的服务器任务
首先,获取xml文件内的路径信息。
privatevoidReadXml()
#region
starttoread:
+thread_interval+"
#endregion
wordPathList=newList<
string>
();
stringxmlLocation=@"
D:
\终结版\word2xps_window_service\WindowsService1\bin\Debug\windows_service_config.xml"
;
XmlReaderreader=XmlReader.Create(xmlLocation);
while(reader.Read())
if(reader.NodeType==XmlNodeType.Element&
&
reader.Name=="
thread_tmie_interval"
)
thread_interval=int.Parse(reader.GetAttribute("
value"
).ToString());
thread_count"
thread_count=int.Parse(reader.GetAttribute("
path"
wordPathList.Add(reader.GetAttribute("
if(reader.NodeType==XmlNodeType.EndElement&
pathlist"
break;
}
if(thread_interval>
1)
timer1.Interval=thread_interval;
XmlReader提供对XML数据进行快速、非缓存、只进访问的读取器。
reader.GetAttribute("
).ToString()来获取值。
其次,在获取了路径信息后就对文件夹内的文件进行遍历,取出未转化成xps的.doc/.docx文件。
DirectoryInfo.GetFileSystemInfos()取出文件内的文件。
publicvoidListFiles(FileSystemInfoinfo)
List<
fliesName=newList<
DirectoryInfodir=infoasDirectoryInfo;
//不是目录
if(dir==null)
return;
FileSystemInfo[]files=dir.GetFileSystemInfos();
FileInfo>
wordFileInfos=newList<
xpsFileInfos=newList<
fileInfos=newList<
for(inti=0;
i<
files.ToList().Count;
i++)
FileInfofile=files[i]asFileInfo;
//是文件
if(file!
=null)
if(file.FullName.Substring(file.FullName.LastIndexOf("
."
))=="
.doc"
||file.FullName.Substring(file.FullName.LastIndexOf("
.docx"
wordFileInfos.Add(file);
fileInfos.Add(file);
elseif(file.FullName.Substring(file.FullName.LastIndexOf("
.xps"
xpsFileInfos.Add(file);
foreach(varwordinwordFileInfos)
stringwordName=word.Name.Substring(0,word.Name.LastIndexOf("
));
foreach(varxpsinxpsFileInfos)
if(wordName==xps.Name.Substring(0,xps.Name.LastIndexOf("
)))
fileInfos.Remove(word);
//对于子目录,进行递归调用
else
最后将所有为转化的word文件转化成xps文件
privatevoidStartToConvert()
timer1.Stop();
wordPathList.ForEach(re=>
ListFiles(newDirectoryInfo(re));
fileInfos.ForEach(fif=>
//ConvertDelegateconvert_delegate=Convert;
//IAsyncResultresult=convert_delegate.BeginInvoke(fif.FullName,fif.DirectoryName+"
\\"
+fif.Name.Substring(0,fif.Name.LastIndexOf("
))+"
Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatXPS,null,null);
Word2Xps.Convert(fif.FullName,fif.DirectoryName+"
Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatXPS);
});
Word2Xps为word转化成xps的方法类。
放在Word2Xps.cs里面
publicclassWord2Xps
publicstaticboolConvert(stringsourcePath,stringtargetPath,Microsoft.Office.Interop.Word.WdExportFormatexportFormat)
boolresult=false;
objectparamMissing=Type.Missing;
Microsoft.Office.Interop.Word.ApplicationwordApplication=newMicrosoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.DocumentwordDocument=null;
try
objectparamSourceDocPath=sourcePath;
stringparamExportFilePath=targetPath;
Microsoft.Office.Interop.Word.WdExportFormatparamExportFormat=exportFormat;
boolparamOpenAfterExport=false;
Microsoft.Office.Interop.Word.WdExportOptimizeForparamExportOptimizeFor=
Microsoft.Office.Interop.Word.WdExportOptimizeFor.wdExportOptimizeForPrint;
Microsoft.Office.Interop.Word.WdExportRangeparamExportRange=Microsoft.Office.Interop.Word.WdExportRange.wdExportAllDocument;
intparamStartPage=0;
intparamEndPage=0;
Microsoft.Office.Interop.Word.WdExportItemparamExportItem=Microsoft.Office.Interop.Word.WdExportItem.wdExportDocumentContent;
boolparamIncludeDocProps=true;
boolparamKeepIRM=true;
Microsoft.Office.Interop.Word.WdExportCreateBookmarksparamCreateBookmarks=
Microsoft.Office.Interop.Word.WdExportCreateBookmarks.wdExportCreateWordBookmarks;
boolparamDocStructureTags=true;
boolparamBitmapMissingFonts=true;
boolparamUseISO19005_1=false;
wordDocument=wordApplication.Documents.Open(
refparamSourceDocPath,refparamMissing,refparamMissing,
refparamMissing,refparamMissing,refparamMissing,
refparamMissing);
if(wordDocument!
wordDocument.ExportAsFixedFormat(paramExportFilePath,
paramExportFormat,paramOpenAfterExport,
paramExportOptimizeFor,paramExportRange,paramStartPage,
paramEndPage,paramExportItem,paramIncludeDocProps,
paramKeepIRM,paramCreateBookmarks,paramDocStructureTags,
paramBitmapMissingFonts,paramUseISO19005_1,
result=true;
catch(Exceptione)
finally
wordDocument.Close(refparamMissing,refparamMissing,refparamMissing);
wordDocument=null;
if(wordApplication!
wordApplication.Quit(refparamMissing,refparamMissing,refparamMissing);
wordApplication=null;
GC.Collect();
GC.WaitForPendingFinalizers();
returnresult;
}
在转化过程中会出现WordDocuments.Openreturnsnull,解决办法就是在C:
\Wind
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows 服务 创建 安装 word 转换 xps