C# 制作Java +Mysql+Tomcat 环境安装程序,一键

系统 1579 0
原文: C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装

要求:

  1. JDK、Mysql、Tomcat三者制作成一个安装包,
  2. 不能单独安装,安装过程不显示三者的界面,
  3. 安装完成要配置好JDK环境、Mysql服务、Tomcat 服务

目的:

  1. 解决客户在安装软件的复杂配置和繁琐
  2. 便于管理软件版本
  3. 便于系统集成

分析:

由于不能使用软件的原始安装版本,故只能将JDK的安装目录拷贝出来,放在D盘的SoftSource文件夹,由于要管理三者,将这三个放进一个文件夹里面

Mysql、Tomcat只能用解压版,要让软件运行起来,要做的事情如下:

  1. 配置JDK环境变量

这一步很重要,否则后面的Tomcat将不能正确运行,

2、安装Mysql服务,我用的是MySQL Server 5.5社区版、解压目录下面有my.ini文件,或者先将mysql安装,然后拷贝安装目录文件,目录结构不能变,安装方法是 用命令行将目录转到mysql的bin目录下,mysqld --install MySQL5 --defaults-file="C:\Program Files\MySQL\MySQL Server 5.5\my.ini"   注意=后面就是你的mysql安装目录下的ini文件路径(可先行在cmd下测试安装,若可以,删除服务的只要将前面的安装语句里面的install改成uninstall)

难点在my.ini文件里面的datadir="D:/ProgramData/MySQL/MySQL Server 5.5/Data/"(数据安装目录)

                                                  basedir="D:/Program Files/MySQL/MySQL Server 5.5/" (软件安装目录)

需要与你的实际目录对应,否则会失败,另外要根据选择不同路径,该路径要可以跟着改变

3、安装Tomcat服务是要执行bin目录下面的service.bat文件用法命令行将目录的转到你的Tomcat 下的bin目录安装语句是

service.bat   install 卸载 为service.bat  uninstall 主要事项(bat文件必须要在当前目录执行,就是命令行的路径必须要转到bat文件的目录,另外需要JAVA_HOME环境变量,还有CATALINA_HOME环境变量(就是要将Tomcat安装目录加到环境变量))

 

思路清晰了,接着就是代码实现了,(先实现JDK和Mysql )

vs2008 新建 C#类库项目,添加组件Installer1.cs(安装组件)命名为MyInstallerClassDll

重写安装方法(安装前、安装、安装后)附上代码:

    
      using 
    
    
      System
    
    ;


    
      using 
    
    
      System
    
    .
    
      Collections
    
    ;


    
      using 
    
    
      System
    
    .
    
      Collections
    
    .
    
      Generic
    
    ;


    
      using 
    
    
      System
    
    .
    
      ComponentModel
    
    ;


    
      using 
    
    
      System
    
    .
    
      Configuration
    
    .
    
      Install
    
    ;


    
      using 
    
    
      System
    
    .
    
      Windows
    
    .
    
      Forms
    
    ;


    
      using 
    
    
      System
    
    .
    
      IO
    
    ;


    
      using 
    
    
      System
    
    .
    
      Text
    
    ;


    
      using 
    
    
      System
    
    .
    
      Diagnostics
    
    ;






    
      namespace 
    
    
      CustomAction


    
    {

    [
    
      RunInstaller
    
    (
    
      true
    
    )]

    
    
      public partial class 
    
    
      MyInstallerClassDll 
    
    : 
    
      Installer

    
    
    {



        
    
      public 
    
    
      MyInstallerClassDll
    
    ()

        {

            
    
      InitializeComponent
    
    ();

        }

        
    
      protected override void 
    
    
      OnBeforeInstall
    
    (
    
      IDictionary 
    
    
      savedState
    
    )

        {





            
    
      string 
    
    
      server 
    
    = 
    
      this
    
    .
    
      Context
    
    .
    
      Parameters
    
    [
    
      "server"
    
    ];

            
    
      string 
    
    
      user 
    
    = 
    
      this
    
    .
    
      Context
    
    .
    
      Parameters
    
    [
    
      "user"
    
    ];

            
    
      base
    
    .
    
      OnBeforeInstall
    
    (
    
      savedState
    
    );

        }

        
    
      public override void 
    
    
      Install
    
    (
    
      IDictionary 
    
    
      stateSaver
    
    )

        {

            
    
      string 
    
    
      installPath 
    
    = 
    
      this
    
    .
    
      Context
    
    .
    
      Parameters
    
    [
    
      "targetdir"
    
    ];

            
    
      string 
    
    
      server 
    
    = 
    
      this
    
    .
    
      Context
    
    .
    
      Parameters
    
    [
    
      "server"
    
    ];

            
    
      string 
    
    
      user 
    
    = 
    
      this
    
    .
    
      Context
    
    .
    
      Parameters
    
    [
    
      "user"
    
    ];

            
    
      //Mysql的配置文件

            
    
    
      IniFile 
    
    
      ini 
    
    = 
    
      new 
    
    
      IniFile
    
    (
    
      installPath 
    
    + 
    
      @"MySQL\MySQL Server 5.5\my.ini"
    
    );

            
    
      //mysql安装路径

            
    
    
      ini
    
    .
    
      Write
    
    (
    
      "mysqld"
    
    , 
    
      "basedir"
    
    , 
    
      installPath 
    
    + 
    
      @"MySQL\MySQL Server 5.5\"
    
    );

            
    
      //Mysql数据文件夹

            
    
    
      ini
    
    .
    
      Write
    
    (
    
      "mysqld"
    
    , 
    
      "datadir"
    
    , 
    
      installPath 
    
    + 
    
      @"MySQL\MySQL Server 5.5\Data\"
    
    );



            
    
      base
    
    .
    
      Install
    
    (
    
      stateSaver
    
    );

        }



        
    
      protected override void 
    
    
      OnAfterInstall
    
    (
    
      IDictionary 
    
    
      savedState
    
    )

        {

            
    
      string 
    
    
      installPath 
    
    = 
    
      this
    
    .
    
      Context
    
    .
    
      Parameters
    
    [
    
      "targetdir"
    
    ];

            
    
      string 
    
    
      mysqlpath 
    
    = 
    
      installPath 
    
    + 
    
      @"MySQL\MySQL Server 5.5\bin"
    
    ;

            
    
      string 
    
    
      jrePath 
    
    = 
    
      installPath 
    
    + 
    
      @"Java\jre6\bin"
    
    ;

            
    
      string 
    
    
      iniPath 
    
    = 
    
      installPath 
    
    + 
    
      @"MySQL\MySQL Server 5.5\my.ini"
    
    ;

            
    
      string 
    
    
      tomcatPath 
    
    = 
    
      installPath 
    
    + 
    
      @"Tomcat\Tomcat6\bin"
    
    ;



            
    
      InstallMysql
    
    (
    
      mysqlpath
    
    , 
    
      iniPath
    
    ,
    
      true
    
    );



            
    
      //设置Mysql环境变量

            
    
    
      SysEnvironment
    
    .
    
      SetPath
    
    (
    
      mysqlpath
    
    );



            
    
      //设置JRE环境变量

            
    
    
      SysEnvironment
    
    .
    
      SetPath
    
    (
    
      jrePath
    
    );



            
    
      //设置Tomcat环境变量

            
    
    
      SysEnvironment
    
    .
    
      SetPath
    
    (
    
      tomcatPath
    
    );



            
    
      base
    
    .
    
      OnAfterInstall
    
    (
    
      savedState
    
    );

      }



        
    
      /// <summary>

        /// 
    
    
      安装与卸载Mysql服务

        
    
    
      /// </summary>

        /// <param name="mysqlpath"></param>

        /// <param name="iniPath"></param>

        /// <param name="isInstall">
    
    
      为true时安装,否则为卸载
    
    
      </param>

        
    
    
      private static void 
    
    
      InstallMysql
    
    (
    
      string 
    
    
      mysqlpath
    
    , 
    
      string 
    
    
      iniPath
    
    , 
    
      bool 
    
    
      isInstall
    
    )

        {

            
    
      //安装Mysql服务

            
    
    
      Process 
    
    
      process 
    
    = 
    
      new 
    
    
      Process
    
    ();

            
    
      process
    
    .
    
      StartInfo
    
    .
    
      FileName 
    
    = 
    
      "cmd.exe"
    
    ;

            
    
      process
    
    .
    
      StartInfo
    
    .
    
      UseShellExecute 
    
    = 
    
      false
    
    ;

            
    
      process
    
    .
    
      StartInfo
    
    .
    
      RedirectStandardInput 
    
    = 
    
      true
    
    ;

            
    
      process
    
    .
    
      StartInfo
    
    .
    
      RedirectStandardOutput 
    
    = 
    
      true
    
    ;

            
    
      process
    
    .
    
      StartInfo
    
    .
    
      RedirectStandardError 
    
    = 
    
      true
    
    ;

            
    
      process
    
    .
    
      StartInfo
    
    .
    
      CreateNoWindow 
    
    = 
    
      true
    
    ;



            
    
      process
    
    .
    
      Start
    
    ();

            
    
      process
    
    .
    
      StandardInput
    
    .
    
      WriteLine
    
    (
    
      ""
    
    );

            
    
      process
    
    .
    
      StandardInput
    
    .
    
      WriteLine
    
    (
    
      "cd " 
    
    + 
    
      mysqlpath
    
    );

            
    
      process
    
    .
    
      StandardInput
    
    .
    
      WriteLine
    
    (
    
      mysqlpath
    
    .
    
      Substring
    
    (2) + 
    
      " cd"
    
    );

            
    
      //mysqld --install MySQLXY --defaults-file="D:\Program Files\MySQL\MySQL Server 5.5\my.ini"

            
    
    
      if 
    
    (
    
      isInstall
    
    )

            {

                
    
      process
    
    .
    
      StandardInput
    
    .
    
      WriteLine
    
    (
    
      "mysqld --install MySQL --defaults-file=" 
    
    + 
    
      '"' 
    
    + 
    
      iniPath 
    
    + 
    
      '"'
    
    );

                
    
      process
    
    .
    
      StandardInput
    
    .
    
      WriteLine
    
    (
    
      "net start mysql"
    
    );

            }



            
    
      else

            
    
    {

                
    
      process
    
    .
    
      StandardInput
    
    .
    
      WriteLine
    
    (
    
      "net stop mysql"
    
    );

                
    
      //mysqld --install MySQLXY --defaults-file="D:\Program Files\MySQL\MySQL Server 5.5\my.ini"

                
    
    
      process
    
    .
    
      StandardInput
    
    .
    
      WriteLine
    
    (
    
      "mysqld --remove MySQL --defaults-file=" 
    
    + 
    
      '"' 
    
    + 
    
      iniPath 
    
    + 
    
      '"'
    
    );



            }

            
    
      process
    
    .
    
      StandardInput
    
    .
    
      WriteLine
    
    (
    
      ""
    
    );

            
    
      process
    
    .
    
      StandardInput
    
    .
    
      WriteLine
    
    (
    
      ""
    
    );

            
    
      process
    
    .
    
      StandardInput
    
    .
    
      WriteLine
    
    (
    
      "exit"
    
    );

            
    
      //Writefile(installPath,process.StandardOutput.ReadToEnd().ToString());

            
    
    
      process
    
    .
    
      Close
    
    ();

        }







        
    
      public override void 
    
    
      Uninstall
    
    (
    
      IDictionary 
    
    
      savedState
    
    )

        {

            
    
      string 
    
    
      installPath 
    
    = 
    
      this
    
    .
    
      Context
    
    .
    
      Parameters
    
    [
    
      "targetdir"
    
    ];

            
    
      string 
    
    
      mysqlpath 
    
    = 
    
      installPath 
    
    + 
    
      @"MySQL\MySQL Server 5.5\bin"
    
    ;



            
    
      string 
    
    
      iniPath 
    
    = 
    
      installPath 
    
    + 
    
      @"MySQL\MySQL Server 5.5\my.ini"
    
    ;

            

            
    
      InstallMysql
    
    (
    
      mysqlpath
    
    , 
    
      iniPath
    
    , 
    
      true
    
    );





            
    
      base
    
    .
    
      Uninstall
    
    (
    
      savedState
    
    );

        }

        
    
      /// <summary>

        /// 
    
    
      写日志

        
    
    
      /// </summary>

        /// <param name="path"></param>

        /// <param name="msg"></param>

        
    
    
      public void 
    
    
      Writefile
    
    (
    
      string 
    
    
      path
    
    , 
    
      string 
    
    
      msg
    
    )

        {

            
    
      string 
    
    
      file 
    
    = 
    
      path 
    
    + 
    
      @"日志.txt"
    
    ;

            
    
      if 
    
    (
    
      File
    
    .
    
      Exists
    
    (
    
      file
    
    ))

                
    
      File
    
    .
    
      Delete
    
    (
    
      file
    
    );

            
    
      using 
    
    (
    
      StreamWriter 
    
    
      sw 
    
    = 
    
      new 
    
    
      StreamWriter
    
    (
    
      file
    
    , 
    
      true
    
    ))

            {



                
    
      sw
    
    .
    
      WriteLine
    
    (
    
      msg
    
    );



            }

        }







    }

}


  

下面是 SysEnvironment 类的代码,读取设置注册表的信息 代码已经封装好了,就不介绍了

(环境变量的注册表位置为HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001 / Session Manager/ Environment

    
      using 
    
    
      System
    
    ;


    
      using 
    
    
      System
    
    .
    
      Collections
    
    .
    
      Generic
    
    ;


    
      using 
    
    
      System
    
    .
    
      Text
    
    ;


    
      using 
    
    
      Microsoft
    
    .
    
      Win32
    
    ;




    
      namespace 
    
    
      CustomAction


    
    {

    
    
      class 
    
    
      SysEnvironment

    
    
    {

        
    
      /// <summary>

        /// 
    
    
      获取系统环境变量

        
    
    
      /// </summary>

        /// <param name="name"></param>

        /// <returns></returns>

        
    
    
      public static string 
    
    
      GetSysEnvironmentByName
    
    (
    
      string 
    
    
      name
    
    )

        {

            
    
      string 
    
    
      result 
    
    = 
    
      string
    
    .
    
      Empty
    
    ;

            
    
      try

            
    
    {

                
    
      result 
    
    = 
    
      OpenSysEnvironment
    
    ().
    
      GetValue
    
    (
    
      name
    
    ).
    
      ToString
    
    ();
    
      //读取

            
    
    }

            
    
      catch 
    
    (
    
      Exception
    
    )

            {



                
    
      return string
    
    .
    
      Empty
    
    ;

            }

            
    
      return 
    
    
      result
    
    ;



        }



        
    
      /// <summary>

        /// 
    
    
      打开系统环境变量注册表

        
    
    
      /// </summary>

        /// <returns>
    
    
      RegistryKey
    
    
      </returns>

        
    
    
      private static 
    
    
      RegistryKey 
    
    
      OpenSysEnvironment
    
    ()

        {

            
    
      RegistryKey 
    
    
      regLocalMachine 
    
    = 
    
      Registry
    
    .
    
      LocalMachine
    
    ;

            
    
      RegistryKey 
    
    
      regSYSTEM 
    
    = 
    
      regLocalMachine
    
    .
    
      OpenSubKey
    
    (
    
      "SYSTEM"
    
    , 
    
      true
    
    );
    
      //打开HKEY_LOCAL_MACHINE下的SYSTEM 

            
    
    
      RegistryKey 
    
    
      regControlSet001 
    
    = 
    
      regSYSTEM
    
    .
    
      OpenSubKey
    
    (
    
      "ControlSet001"
    
    , 
    
      true
    
    );
    
      //打开ControlSet001 

            
    
    
      RegistryKey 
    
    
      regControl 
    
    = 
    
      regControlSet001
    
    .
    
      OpenSubKey
    
    (
    
      "Control"
    
    , 
    
      true
    
    );
    
      //打开Control 

            
    
    
      RegistryKey 
    
    
      regManager 
    
    = 
    
      regControl
    
    .
    
      OpenSubKey
    
    (
    
      "Session Manager"
    
    , 
    
      true
    
    );
    
      //打开Control 



            
    
    
      RegistryKey 
    
    
      regEnvironment 
    
    = 
    
      regManager
    
    .
    
      OpenSubKey
    
    (
    
      "Environment"
    
    , 
    
      true
    
    );

            
    
      return 
    
    
      regEnvironment
    
    ;

        }



        
    
      /// <summary>

        /// 
    
    
      设置系统环境变量

        
    
    
      /// </summary>

        /// <param name="name">
    
    
      变量名
    
    
      </param>

        /// <param name="strValue">
    
    
    
      </param>

        
    
    
      public static void 
    
    
      SetSysEnvironment
    
    (
    
      string 
    
    
      name
    
    , 
    
      string 
    
    
      strValue
    
    )

        {

            
    
      OpenSysEnvironment
    
    ().
    
      SetValue
    
    (
    
      name
    
    , 
    
      strValue
    
    );



        }



        
    
      /// <summary>

        /// 
    
    
      检测系统环境变量是否存在

        
    
    
      /// </summary>

        /// <param name="name"></param>

        /// <returns></returns>

        
    
    
      public bool 
    
    
      CheckSysEnvironmentExist
    
    (
    
      string 
    
    
      name
    
    )

        {

            
    
      if 
    
    (!
    
      string
    
    .
    
      IsNullOrEmpty
    
    (
    
      GetSysEnvironmentByName
    
    (
    
      name
    
    )))

                
    
      return true
    
    ;

            
    
      else

                return false
    
    ;

        }



        
    
      /// <summary>

        /// 
    
    
      添加到PATH环境变量(会检测路径是否存在,存在就不重复)

        
    
    
      /// </summary>

        /// <param name="strPath"></param>

        
    
    
      public static void 
    
    
      SetPath
    
    (
    
      string 
    
    
      strHome
    
    )

        {

            
    
      string 
    
    
      pathlist 
    
    = 
    
      GetSysEnvironmentByName
    
    (
    
      "PATH"
    
    );

            
    
      string
    
    [] 
    
      list 
    
    = 
    
      pathlist
    
    .
    
      Split
    
    (
    
      ';'
    
    );

            
    
      bool 
    
    
      isPathExist 
    
    = 
    
      false
    
    ;



            
    
      foreach 
    
    (
    
      string 
    
    
      item 
    
    
      in 
    
    
      list
    
    )

            {

                
    
      if 
    
    (
    
      item 
    
    == 
    
      strHome
    
    )

                    
    
      isPathExist 
    
    = 
    
      true
    
    ;

            }

            
    
      if 
    
    (!
    
      isPathExist
    
    )

            {

                
    
      SetSysEnvironment
    
    (
    
      "PATH"
    
    , 
    
      pathlist 
    
    +
    
      strHome
    
    + 
    
      ";"
    
    );

            }



        }

    }

}


  

好了,接下来创建Ini文件操作类,调用了系统api,已经封装好了,可以直接用了

    
      using 
    
    
      System
    
    ;


    
      using 
    
    
      System
    
    .
    
      IO
    
    ;


    
      using 
    
    
      System
    
    .
    
      Collections
    
    .
    
      Generic
    
    ;


    
      using 
    
    
      System
    
    .
    
      Text
    
    ;


    
      using 
    
    
      System
    
    .
    
      Runtime
    
    .
    
      InteropServices
    
    ;




    
      namespace 
    
    
      CustomAction


    
    {

    
    
      public class 
    
    
      IniFile

    
    
    {

        
    
      private string 
    
    
      m_iniFileFullPath
    
    ;



        
    
      /// <summary>

        /// 
    
    
      ini文件路径

        
    
    
      /// </summary>

        /// <param name="iniFilePath"></param>

        
    
    
      public 
    
    
      IniFile
    
    (
    
      string 
    
    
      iniFilePath
    
    )

        {

            
    
      m_iniFileFullPath 
    
    = 
    
      iniFilePath
    
    ;

        }



        
    
      /// <summary>

        /// 
    
    
      写入信息

        
    
    
      /// </summary>

        /// <param name="iniSection"></param>

        /// <param name="iniKey"></param>

        /// <param name="iniValue"></param>

        
    
    
      public void 
    
    
      Write
    
    (
    
      string 
    
    
      iniSection
    
    , 
    
      string 
    
    
      iniKey
    
    , 
    
      string 
    
    
      iniValue
    
    )

        {

            
    
      WritePrivateProfileString
    
    (
    
      iniSection
    
    , 
    
      iniKey
    
    , 
    
      iniValue
    
    , 
    
      this
    
    .
    
      m_iniFileFullPath
    
    );

        }



        
    
      /// <summary>

        /// 
    
    
      读取信息

        
    
    
      /// </summary>

        /// <param name="iniSection"></param>

        /// <param name="iniKey"></param>

        /// <returns></returns>

        
    
    
      public string 
    
    
      Read
    
    (
    
      string 
    
    
      iniSection
    
    , 
    
      string 
    
    
      iniKey
    
    )

        {

            
    
      StringBuilder 
    
    
      resultValue 
    
    = 
    
      new 
    
    
      StringBuilder
    
    (255);

            
    
      int 
    
    
      i 
    
    = 
    
      GetPrivateProfileString
    
    (
    
      iniSection
    
    , 
    
      iniKey
    
    , 
    
      ""
    
    , 
    
      resultValue
    
    ,

                                            255, 
    
      this
    
    .
    
      m_iniFileFullPath
    
    );

            
    
      return 
    
    
      resultValue
    
    .
    
      ToString
    
    ();

        }



        
    
      /// <summary>

        /// 
    
    
      写入信息

        
    
    
      /// </summary>

        /// <param name="iniSection"></param>

        /// <param name="iniKey"></param>

        /// <param name="iniValue"></param>

        /// <param name="iniPath"></param>

        
    
    
      public void 
    
    
      Write
    
    (
    
      string 
    
    
      iniSection
    
    , 
    
      string 
    
    
      iniKey
    
    , 
    
      string 
    
    
      iniValue
    
    , 
    
      string 
    
    
      iniPath
    
    )

        {

            
    
      WritePrivateProfileString
    
    (
    
      iniSection
    
    , 
    
      iniKey
    
    , 
    
      iniValue
    
    , 
    
      iniPath
    
    );

        }



        
    
      /// <summary>

        /// 
    
    
      读取信息

        
    
    
      /// </summary>

        /// <param name="iniSection"></param>

        /// <param name="iniKey"></param>

        /// <param name="iniPath"></param>

        /// <returns></returns>

        
    
    
      public static string 
    
    
      Read
    
    (
    
      string 
    
    
      iniSection
    
    , 
    
      string 
    
    
      iniKey
    
    , 
    
      string 
    
    
      iniPath
    
    )

        {

            
    
      StringBuilder 
    
    
      resultValue 
    
    = 
    
      new 
    
    
      StringBuilder
    
    (255);

            
    
      int 
    
    
      i 
    
    = 
    
      GetPrivateProfileString
    
    (
    
      iniSection
    
    , 
    
      iniKey
    
    , 
    
      ""
    
    , 
    
      resultValue
    
    ,

                                            255, 
    
      iniPath
    
    );

            
    
      return 
    
    
      resultValue
    
    .
    
      ToString
    
    ();

        }



        [
    
      DllImport
    
    (
    
      "kernel32"
    
    )]

        
    
      private static extern long 
    
    
      WritePrivateProfileString
    
    (
    
      string 
    
    
      section
    
    ,

            
    
      string 
    
    
      key
    
    , 
    
      string 
    
    
      val
    
    , 
    
      string 
    
    
      filePath
    
    );



        [
    
      DllImport
    
    (
    
      "kernel32"
    
    )]

        
    
      private static extern int 
    
    
      GetPrivateProfileString
    
    (
    
      string 
    
    
      section
    
    ,

                 
    
      string 
    
    
      key
    
    , 
    
      string 
    
    
      def
    
    , 
    
      StringBuilder 
    
    
      retVal
    
    ,

            
    
      int 
    
    
      size
    
    , 
    
      string 
    
    
      filePath
    
    );

    }

}


  

现在基本代码已经写好了,右键解决方案,添加安装部署项目,右键项目文件视图,新建文件夹Mysql、Java、Tomcat,将你的拷贝的Mysql贴进Mysql项目里面

 

接下来,右键应用程序文件夹添加主输出

然后右键项目,自定义操作视图,添加安装和卸载的操作(选中主输出)

好了,现在可以测试下了Mysql,未完待续。。。。。。。

下次接着写Tomcat

C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论