通常都是:
installutil /u Service1.exe可是做好了,如何让别人使用,一般用户没有安装.net,总不能也让他instalutil一下吧。怎么做成.exe,然后双击,就能安装。

解决方案 »

  1.   

    所以你需要让用户安装.net framework
      

  2.   

    和普通软件没什么两样吧,只是装好了以后还需要自动执行以下installutil Service1.exe 而已
    不过我想一般不会用.net开发什么杀毒软件的吧,需要用户安装成服务的软件,用户一般不是个电脑盲,这点事情应该是知道的,除非你是想装个后门软件,嘿嘿
      

  3.   

    要这么说,那C#编的程序不就P用都没有了嘛,还要装.net 才能用。
    就不能不装.net吗?
      

  4.   

    把代码放进去自己做个安装服务的东东不就解决拉吗哈哈哈哈哈哈哈哈哈哈哈vusing System;
    using System.Runtime.InteropServices;
    namespace MyServiceInstaller
    {    class ServiceInstaller
        {
            #region Private Variables
            private string _servicePath;
            private string _serviceName;
            private string _serviceDisplayName;
            #endregion Private Variables
            #region DLLImport
            [DllImport("advapi32.dll")]
            public static extern IntPtr OpenSCManager(string lpMachineName, string lpSCDB, int scParameter);
            [DllImport("Advapi32.dll")]
            public static extern IntPtr CreateService(IntPtr SC_HANDLE, string lpSvcName, string lpDisplayName,
            int dwDesiredAccess, int dwServiceType, int dwStartType, int dwErrorControl, string lpPathName,
            string lpLoadOrderGroup, int lpdwTagId, string lpDependencies, string lpServiceStartName, string lpPassword);
            [DllImport("advapi32.dll")]
            public static extern void CloseServiceHandle(IntPtr SCHANDLE);
            [DllImport("advapi32.dll")]
            public static extern int StartService(IntPtr SVHANDLE, int dwNumServiceArgs, string lpServiceArgVectors);
            [DllImport("advapi32.dll", SetLastError = true)]
            public static extern IntPtr OpenService(IntPtr SCHANDLE, string lpSvcName, int dwNumServiceArgs);
            [DllImport("advapi32.dll")]
            public static extern int DeleteService(IntPtr SVHANDLE);
            [DllImport("kernel32.dll")]
            public static extern int GetLastError();
            #endregion DLLImport
            /// <summary>
            /// 应用程序入口.
            /// </summary>        [STAThread]
            static void Main(string[] args)
            {            string i = "0";
                if (i.ToString().Trim() == "0")
                {
                    stop();
                }
                else
                {
                    run();
                }        }        static void run()
            {
                string svcPath;
                string svcName;
                string svcDispName;
                //服务程序的路径
                svcPath = @"C:\send\SerialPort_SendService.exe";
                svcDispName = "SerialPort_SendService";
                svcName = "SerialPort_SendService";
                ServiceInstaller c = new ServiceInstaller();
                c.InstallService(svcPath, svcName, svcDispName);
            }
            static void stop()
            {
                UnInstallService("SerialPort_SendService");
            }
            /// <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)
            {
                #region Constants declaration.
                int SC_MANAGER_CREATE_SERVICE = 0x0002;
                int SERVICE_WIN32_OWN_PROCESS = 0x00000010;
                //int SERVICE_DEMAND_START = 0x00000003;
                int SERVICE_ERROR_NORMAL = 0x00000001;
                int STANDARD_RIGHTS_REQUIRED = 0xF0000;
                int SERVICE_QUERY_CONFIG = 0x0001;
                int SERVICE_CHANGE_CONFIG = 0x0002;
                int SERVICE_QUERY_STATUS = 0x0004;
                int SERVICE_ENUMERATE_DEPENDENTS = 0x0008;
                int SERVICE_START = 0x0010;
                int SERVICE_STOP = 0x0020;
                int SERVICE_PAUSE_CONTINUE = 0x0040;
                int SERVICE_INTERROGATE = 0x0080;
                int SERVICE_USER_DEFINED_CONTROL = 0x0100;
                int SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED |
                SERVICE_QUERY_CONFIG |
                SERVICE_CHANGE_CONFIG |
                SERVICE_QUERY_STATUS |
                SERVICE_ENUMERATE_DEPENDENTS |
                SERVICE_START |
                SERVICE_STOP |
                SERVICE_PAUSE_CONTINUE |
                SERVICE_INTERROGATE |
                SERVICE_USER_DEFINED_CONTROL);
                int SERVICE_AUTO_START = 0x00000002;
                #endregion 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 static 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;
            }
        }
    }
      

  5.   

    就算是C++写的,一样也要考虑MFC库是否有,什么版本,纯粹的C写WinAPI也还要考虑是windowsXP还是Windows98,版本不同也是不一样的,.net你别想他是一个软件,其实他是一个虚拟的电脑,这样你写的软件就不用去考虑是windows98还是windowsxp了,也许以后你都不用考虑是Unix了,考虑一下.net版本就行了,不是更好么
      

  6.   

    就用vs2005打包就可以..添加setup项目.然后一步步的做.
      

  7.   

    liangqingxing 这位大侠写的代码在这里有问题,
    意外的字符“¦” 是不是要写到一行去?
    int SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED ¦ 
                SERVICE_QUERY_CONFIG ¦ 
                SERVICE_CHANGE_CONFIG ¦ 
                SERVICE_QUERY_STATUS ¦ 
                SERVICE_ENUMERATE_DEPENDENTS ¦ 
                SERVICE_START ¦ 
                SERVICE_STOP ¦ 
                SERVICE_PAUSE_CONTINUE ¦ 
                SERVICE_INTERROGATE ¦ 
                SERVICE_USER_DEFINED_CONTROL); 
      

  8.   

    在用做安装部署项目的时候,的【系统必备】项选成【从我的应用程序相同位置下载系统应用必备组件】这样打包的时候就会把net framework一起打包到setup里