将控制台应用程序转换为Windows服务

Murali Uppangala

我正在尝试将生成pdf报告的控制台应用程序转换为Windows服务。我的代码如下。我的方向正确吗?我安装了此服务,启动/停止工作正常,但未生成报告!单独使用控制台应用程序可以很好地生成Output.pdf。我的目的是在服务启动时生成输出。

class Program : ServiceBase
{
    public Program()
    {
        this.ServiceName = "My PdfGeneration";
    }
    static void Main(string[] args)
    {

        ServiceBase.Run(new Program());
    }
    protected override void OnStart(string[] args)
    {
        EventLog.WriteEntry("My PdfGeneration Started");
        //base.OnStart(args);
        //Customise parameters for render method
        Warning[] warnings;
        string[] streamIds;
        string mimeType = string.Empty;   //"application/pdf";
        string encoding = string.Empty;
        string filenameExtension = string.Empty;
        string deviceInfo = "<DeviceInfo>" + "<OutputFormat>PDF</OutputFormat>" + "<PageWidth>15in</PageWidth>" + "<PageHeight>11in</PageHeight>" + "<MarginTop>0.5in</MarginTop>" + "<MarginLeft>0.5in</MarginLeft>" + "<MarginRight>0.5in</MarginRight>" + "<MarginBottom>0.5in</MarginBottom>" + "</DeviceInfo>";

        //Create a SqlConnection to the AdventureWorks2008R2 database. 
        SqlConnection connection = new SqlConnection("data source=localhost;initial catalog=pod;integrated security=True");

        //Create a SqlDataAdapter for the Sales.Customer table.
        SqlDataAdapter adapter = new SqlDataAdapter();

        // A table mapping names the DataTable.
        adapter.TableMappings.Add("View", "Route_Manifest");

        // Open the connection.
        connection.Open();
        Console.WriteLine("\nThe SqlConnection is open.");

        // Create a SqlCommand to retrieve Suppliers data.
        SqlCommand command = new SqlCommand("SELECT TOP 10 [RouteID],[FullTruckID],[DriverID],[DriverName],[StopID],[CustomerID],[CustomerName],[InvoiceID],[last_modified],[Amount] FROM [pod].[dbo].[Route_Manifest]", connection);
        command.CommandType = CommandType.Text;

        // Set the SqlDataAdapter's SelectCommand.
        adapter.SelectCommand = command;
        command.ExecuteNonQuery();

        // Fill the DataSet.
        DataSet dataset = new DataSet("Route_Manifest");
        adapter.Fill(dataset);

        //Set up reportviewver and specify path
        ReportViewer viewer = new ReportViewer();
        viewer.ProcessingMode = ProcessingMode.Local;
        viewer.LocalReport.ReportPath = @"C:\Documents and Settings\xxxxx\My Documents\Visual Studio 2008\Projects\PdfReportGeneration\PdfReportGeneration\Report.rdlc";

        //specify the dataset syntax = (datasetofreport.rdlc,querydataset); 
        viewer.LocalReport.DataSources.Add(new ReportDataSource("podDataSet_Route_Manifest", dataset.Tables[0]));


        //Now render it to pdf
        try
        {
            byte[] bytes = viewer.LocalReport.Render("PDF", deviceInfo, out mimeType, out encoding, out filenameExtension, out streamIds, out warnings);
            //output to bin directory 
            using (System.IO.FileStream fs = new System.IO.FileStream("output.pdf", System.IO.FileMode.Create))
            {
                //file saved to bin directory
                fs.Write(bytes, 0, bytes.Length);
            }
            Console.WriteLine("\n YEP!! The report has been generated:-)");

            /*           //Save report to D:\ -- later
                         FileStream fsi = new FileStream(@"D:\output.pdf", System.IO.FileMode.Create);
            */
        }
        catch (Exception e)
        {
            Console.WriteLine("\n CHEY!!!this Exception encountered:", e);
        }


        // Close the connection.
        connection.Close();
        Console.WriteLine("\nThe SqlConnection is closed.");
        Console.ReadLine();

    }
    protected override void OnStop()
    {
        EventLog.WriteEntry("My PdfGeneration Stopped");
            base.OnStop();
    }

}
计算机

我建议您将OnStart事件中的代码移到单独的线程中,因为服务需要及时启动,否则启动时可能会超时。

例如

using System.ServiceProcess;
using System.Threading;

namespace myService
{
    class Service : ServiceBase
    {
        static void Main()
        {
            ServiceBase.Run(new Service());
        }

        public Service()
        {
            Thread thread = new Thread(Actions);
            thread.Start();
        }

        public void Actions()
        {
            // Do Work
        }
    }
}

您可能还需要检查执行用户(运行服务的用户上下文)是否对您正在写入的文件夹具有权限等。

您还需要将错误写入事件日志,而不是像在代码片段中看到的那样将它们写入控制台窗口(此时,您的代码吞没了异常,这就是为什么您无法指出发生了什么问题的原因)

在此处了解更多信息:C#基础知识:创建Windows服务

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将控制台应用程序转换为Windows服务

来自分类Dev

C#将控制台应用程序转换为服务

来自分类Dev

将 WCF 服务转换为控制台应用程序

来自分类Dev

C ++(VC2010)帮助将控制台应用程序转换为隐藏的Windows应用程序吗?

来自分类Dev

将 c# 控制台应用程序转换为 c# windows 窗体应用程序

来自分类Dev

将DOS应用程序转换为Win32控制台应用程序?

来自分类Dev

将DOS应用程序转换为Win32控制台应用程序?

来自分类Dev

将 .NET Core 控制台应用程序转换为自包含应用程序

来自分类Dev

如何将控制台应用程序转换为SWING框架?

来自分类Dev

将C#控制台应用程序转换为ASP.NET MVC应用程序

来自分类Dev

反复将数据从Windows服务传输到控制台应用程序

来自分类Dev

如何将控制台应用程序的代码块转换为 Azure Function 的代码块?

来自分类Dev

使控制台应用程序成为服务?

来自分类Dev

使用控制台应用程序的WCF服务主机

来自分类Dev

异步控制台应用程序还是服务?

来自分类Dev

使用控制台应用程序的WCF服务主机

来自分类Dev

如何通过SSH服务控制台应用程序

来自分类Dev

C#控制台应用程序即服务

来自分类Dev

在控制台应用程序中使用 WCF 服务

来自分类Dev

获取控制台应用程序但不提供服务的Windows防火墙提示

来自分类Dev

从vb.net控制台应用程序到Windows服务

来自分类Dev

使用Windows服务或控制台应用程序获取access_token。对于Instagram Api

来自分类Dev

如何检查上下文是Windows服务还是控制台应用程序

来自分类Dev

异步/等待或任务。在控制台应用程序/ Windows服务中运行

来自分类Dev

如何读取Windows服务启动的控制台应用程序的输出

来自分类Dev

.NET Core 3.1控制台应用程序作为Windows服务

来自分类Dev

从vb.NET控制台应用程序到Windows服务

来自分类Dev

将类从控制台应用程序传递到WCF服务

来自分类Dev

是否可以将Windows控制台应用程序与Windows GUI应用程序一起运行?

Related 相关文章

  1. 1

    将控制台应用程序转换为Windows服务

  2. 2

    C#将控制台应用程序转换为服务

  3. 3

    将 WCF 服务转换为控制台应用程序

  4. 4

    C ++(VC2010)帮助将控制台应用程序转换为隐藏的Windows应用程序吗?

  5. 5

    将 c# 控制台应用程序转换为 c# windows 窗体应用程序

  6. 6

    将DOS应用程序转换为Win32控制台应用程序?

  7. 7

    将DOS应用程序转换为Win32控制台应用程序?

  8. 8

    将 .NET Core 控制台应用程序转换为自包含应用程序

  9. 9

    如何将控制台应用程序转换为SWING框架?

  10. 10

    将C#控制台应用程序转换为ASP.NET MVC应用程序

  11. 11

    反复将数据从Windows服务传输到控制台应用程序

  12. 12

    如何将控制台应用程序的代码块转换为 Azure Function 的代码块?

  13. 13

    使控制台应用程序成为服务?

  14. 14

    使用控制台应用程序的WCF服务主机

  15. 15

    异步控制台应用程序还是服务?

  16. 16

    使用控制台应用程序的WCF服务主机

  17. 17

    如何通过SSH服务控制台应用程序

  18. 18

    C#控制台应用程序即服务

  19. 19

    在控制台应用程序中使用 WCF 服务

  20. 20

    获取控制台应用程序但不提供服务的Windows防火墙提示

  21. 21

    从vb.net控制台应用程序到Windows服务

  22. 22

    使用Windows服务或控制台应用程序获取access_token。对于Instagram Api

  23. 23

    如何检查上下文是Windows服务还是控制台应用程序

  24. 24

    异步/等待或任务。在控制台应用程序/ Windows服务中运行

  25. 25

    如何读取Windows服务启动的控制台应用程序的输出

  26. 26

    .NET Core 3.1控制台应用程序作为Windows服务

  27. 27

    从vb.NET控制台应用程序到Windows服务

  28. 28

    将类从控制台应用程序传递到WCF服务

  29. 29

    是否可以将Windows控制台应用程序与Windows GUI应用程序一起运行?

热门标签

归档