• 在客户机上安装Windows服务


    //目前此方法只在WindowsXP测试通过,在Windows2003服务器上不能应用
    //本文主要介绍对用c#.net生成的Windows服务程序进行安装,共采用了两种方法,其中一种方法为调用
    //installutil.exe进行安装,同时生成了 Process 类 的使用实例
    //writer:furenjun 2006.4.28
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.Runtime.InteropServices;



    using System.Diagnostics;
    using System.Reflection;
    using System.Collections.Specialized;
    using System.Text;

    namespace installWindowsService
    {
        
    /// <summary>
        
    /// Form1 的摘要说明。
        
    /// </summary>

        public class Form1 : System.Windows.Forms.Form
        
    {
            
    Private Variables Private Variables
            
    DLLImport

            
    private System.Windows.Forms.Button button1;
            
    /// <summary>
            
    /// 必需的设计器变量。
            
    /// </summary>

            private System.ComponentModel.Container components = null;

            
    public Form1()
            
    {
                
    //
                
    // Windows 窗体设计器支持所必需的
                
    //
                InitializeComponent();

                
    //
                
    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
                
    //
            }


            
    /// <summary>
            
    /// 清理所有正在使用的资源。
            
    /// </summary>

            protected override void Dispose( bool disposing )
            
    {
                
    if( disposing )
                
    {
                    
    if (components != null
                    
    {
                        components.Dispose();
                    }

                }

                
    base.Dispose( disposing );
            }


            
    Windows 窗体设计器生成的代码

            
    /// <summary>
            
    /// 应用程序的主入口点。
            
    /// </summary>

            [STAThread]
            
    static void Main() 
            
    {
                Application.Run(
    new Form1());
            }


            
    private void button1_Click(object sender, System.EventArgs e)
            
    {
                

                
    string svcPath;
                
    string svcName;
                
    string svcDispName;
                
    //服务程序的路径
                svcPath = @"E:\TransactionServiceCS\bin\Release\TransactionServiceCS.exe";
            
                
    //OpenFileDialog openFileDialog1 = new OpenFileDialog();

                openFileDialog1.InitialDirectory 
    = "c:\\" ;
                openFileDialog1.Filter 
    = "exe file(*.exe)|*.*" ;
                openFileDialog1.FilterIndex 
    = 0 ;
                openFileDialog1.RestoreDirectory 
    = true ;



                
    if(openFileDialog1.ShowDialog() != DialogResult.OK)
                
    {
                
                    
    return;
                }

                
    else
                    svcPath
    =this.openFileDialog1.FileName;  
                svcDispName
    ="MyDBWriter";
                svcName
    = "MyDBWriter";
                
                
    if(InstallService(svcPath, svcName, svcDispName))
                    MessageBox.Show(
    "安装成功") ;
                Console.Read();

            }

            
    /// <summary>
            
    /// 安装和运行
            
    /// </summary>
            
    /// <param name="svcPath">程序路径.</param>
            
    /// <param name="svcName">服务名</param>
            
    /// <param name="svcDispName">服务显示名称.</param>
            
    /// <returns>服务安装是否成功.</returns>

            public bool InstallService(string svcPath, string svcName, string svcDispName)
            
    {
                
    Constants declaration. Constants declaration.
                
    try
                
    {
                    IntPtr sc_handle 
    = OpenSCManager(null,null,SC_MANAGER_CREATE_SERVICE);
                    
    if (sc_handle.ToInt32() != 0)
                    
    {
                        IntPtr sv_handle 
    = CreateService(sc_handle,svcName,svcDispName,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,svcPath,null,0,null,null,null);
                        
    if(sv_handle.ToInt32() ==0)
                        
    {
                            CloseServiceHandle(sc_handle);
                            
    return false;
                        }

                        
    else
                        
    {
                            
    //试尝启动服务
                            int i = StartService(sv_handle,0,null);
                            
    if(i==0)
                            
    {

                                
    return false;
                            }


                            CloseServiceHandle(sc_handle);
                            
    return true;
                        }

                    }

                    
    else

                        
    return false;
                }

                
    catch(Exception e)
                
    {
                    
    throw e;
                    
                }

                
            }

            
    /// <summary>
            
    /// 反安装服务.
            
    /// </summary>
            
    /// <param name="svcName">服务名.</param>

            public bool UnInstallService(string svcName)
            
    {
                
    int GENERIC_WRITE = 0x40000000;
                IntPtr sc_hndl 
    = OpenSCManager(null,null,GENERIC_WRITE);
                
    if(sc_hndl.ToInt32() !=0)
                
    {
                    
    int DELETE = 0x10000;
                    IntPtr svc_hndl 
    = OpenService(sc_hndl,svcName,DELETE);
                    
    if(svc_hndl.ToInt32() !=0)
                    

                        
    int i = DeleteService(svc_hndl);
                        
    if (i != 0)
                        
    {
                            CloseServiceHandle(sc_hndl);
                            
    return true;
                        }

                        
    else
                        
    {
                            CloseServiceHandle(sc_hndl);
                            
    return false;
                        }

                    }

                    
    else
                        
    return false;
                }

                
    else
                    
    return false;
            }


            
    private void button2_Click(object sender, System.EventArgs e)
            
    {

                
    // Get the path to InstallUtil
                string installUtilPath = RuntimeEnvironment.GetRuntimeDirectory() + "InstallUtil.exe";
                
    string svsPath = @"E:\TransactionServiceCS\bin\Release\TransactionServiceCS.exe";
                
    if(openFileDialog1.ShowDialog() != DialogResult.OK)
                
    {
                                
                    
    return;
                }

                
    else
                    svsPath
    =@" "+this.openFileDialog1.FileName; 
                MessageBox.Show(svsPath) ;
                
    this.button2.Enabled =false
                RunInstallUtil(installUtilPath,svsPath );
            }

        
            
    public  void RunInstallUtil(string installUtilPath, string CmdParameterAndfullExeName) 
            
    {
                
                
    string argument = CmdParameterAndfullExeName;

                
    // Create a new process
                Process process = new Process();

                
    // Setup the new process's information
                ProcessStartInfo processStartInfo = new ProcessStartInfo();
                
    // Set the path of the file to be executed by the new process
                processStartInfo.FileName = installUtilPath;
                
    // Set the arguments of the new process
                processStartInfo.Arguments = argument;
                
    // Stop it from using the shell to start the new process
                
    //(this is necessary in order to stop it from creating a new window)
                processStartInfo.UseShellExecute = false;
                
    // Don't let it create a new window
                
    //processStartInfo.CreateNoWindow = true;
                processStartInfo.CreateNoWindow = false//显示窗体


                
    //注意   如果将 ErrorDialog 设置为 true,则 UseShellExecute 必须为 true。
                
    //WorkingDirectory 属性的行为在 UseShellExecute 分别为 true 和 false 时是不同的。
                
    //当 UseShellExecute 为 true 时,WorkingDirectory 属性指定可执行文件的位置。
                
    //如果 WorkingDirectory 是空字符串,则认为当前目录包含可执行文件。
                
    //当 UseShellExecute 为 false 时,不使用 WorkingDirectory 属性查找可执行文件。
                
    //相反,它被已启动的进程使用,并且只在新进程的上下文中有意义。
            
                
    // Assign the information to the process
                process.StartInfo = processStartInfo;

                
    // Start the process and wait for it to exit
                process.Start();

                process.WaitForExit();
                
                button2.Enabled 
    =true

                

            }


            
    private void button3_Click(object sender, System.EventArgs e)
            
    {
                
    string installUtilPath = RuntimeEnvironment.GetRuntimeDirectory() + "InstallUtil.exe";
                
    string svsPath = @"E:\TransactionServiceCS\bin\Release\TransactionServiceCS.exe";
                
    if(openFileDialog1.ShowDialog() != DialogResult.OK)
                
    {
                                
                    
    return;
                }

                
    else
                    svsPath
    =@" /u "+this.openFileDialog1.FileName; 
                MessageBox.Show(svsPath) ;
                
    this.button2.Enabled =false
                RunInstallUtil(installUtilPath,svsPath );
            }


            
    private void button4_Click(object sender, System.EventArgs e)
            
    {
                
    // Start a new process for the cmd
                
    //string FileName=@"..\..\printNum.exe";
                this.richTextBox1.Text ="开始打印:"+System.DateTime.Now.ToString()+"\n";  
                
    string FileName=Application.StartupPath +@"\printNum.exe";
                Process process 
    = new Process();
                process.StartInfo.UseShellExecute 
    = false;
                process.StartInfo.RedirectStandardOutput 
    = true;
                process.StartInfo.RedirectStandardError 
    = true;
                process.StartInfo.CreateNoWindow 
    = true;
                process.StartInfo.FileName 
    = FileName;
                process.StartInfo.Arguments 
    ="";
                process.StartInfo.WorkingDirectory 
    = Application.StartupPath ; //获取或设置要启动的进程的初始目录。
                try
                
    {
                    process.Start();
                    
    string outputStr=process.StandardOutput.ReadToEnd();
                    
    this.richTextBox1.AppendText(outputStr + Environment.NewLine);
                }

                
    catch(System.Exception e1)
                
    {
                    
    this.richTextBox1.AppendText(e1.ToString()  + Environment.NewLine);
                    
    string ErrorOutput=process.StandardError.ToString();  
                    
    this.richTextBox1.AppendText(ErrorOutput + Environment.NewLine);
                    
    if(process.HasExited)
                        process.Kill();
                }

            }

        }

    }

    using System;
    using System.Threading;
    namespace printNum
    {
        
    /// <summary>
        
    /// Class1 的摘要说明。
        
    /// </summary>

        class Class1
        
    {
            
    /// <summary>
            
    /// 应用程序的主入口点。
            
    /// </summary>

            [STAThread]
            
    static void Main(string[] args)
            
    {
                
    //
                
    // TODO: 在此处添加代码以启动应用程序
                
    //
                for (int lineNumber = 0; lineNumber < 50; lineNumber++)
                
    {
                    Console.WriteLine (
    "正在打印: " + lineNumber);
                    System.Threading.Thread.Sleep(
    2); // immitate doing something between Console Writes.
                }

                Console.WriteLine (
    "打印结束!");
            }

        }

    }

  • 相关阅读:
    【leetcode】Maximum Subarray
    【USACO】
    【leetcode】Remove Duplicates from Sorted Array
    【leetcode】Path Sum II
    【leetcode】Swap Nodes in Pairs
    【leetcode】Word Ladder
    【leetcode】Copy List with Random Pointer
    【leetcode】Longest Palindromic Substring
    #ifdef #endif #if #endif
    tar [options] [list of file]
  • 原文地址:https://www.cnblogs.com/furenjun/p/387602.html
Copyright © 2020-2023  润新知