first
This commit is contained in:
1 parent
af2f967059
commit
754c24615c
166 files changed
+81865
-2
No files matched your search
@@ -0,0 +1,52 @@
|
||||
package initFunc
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
"time"
|
||||
)
|
||||
|
||||
//设备自检
|
||||
|
||||
//1.检测网络是否正常,如果不正常,提示用户检查主控箱电源是否跳闸 宽带是否欠费 网络接线是否有问题
|
||||
func CheckNetwork() error {
|
||||
err := pingNet("www.baidu.com")
|
||||
return err
|
||||
}
|
||||
|
||||
//2 检测路由器 192.168.881 检测主机 192.168.88.2 检测监控 192.168.88.7 检测AP 192.168.88.9 检测开关路由器 192.168.88.8 检测速哇服务器 mp.suwa3d.com
|
||||
func CheckDevice() map[string]string {
|
||||
arrIpDevices := map[string]string{
|
||||
"路由器":"192.168.88.1",
|
||||
"主机":"192.168.8.2",
|
||||
"AP":"192.168.88.9",
|
||||
"开关路由器":"192.168.88.8",
|
||||
"速哇服务器":"mp.suwa3d.com",
|
||||
"监控":"192.168.88.7",
|
||||
}
|
||||
errIpDevices := map[string]string{}
|
||||
for k,v := range arrIpDevices {
|
||||
err := pingNet(v)
|
||||
if err != nil {
|
||||
errIpDevices[k] = v
|
||||
}
|
||||
}
|
||||
return errIpDevices
|
||||
}
|
||||
|
||||
//ping ip的方法
|
||||
func pingNet(ip string) error {
|
||||
ipInfo := net.ParseIP(ip)
|
||||
if ipInfo == nil {
|
||||
return errors.New("IP信息有误")
|
||||
}
|
||||
// 创建 TCP 连接
|
||||
conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:80", ipInfo), time.Second*1)
|
||||
if err != nil {
|
||||
return errors.New("连接失败-"+err.Error())
|
||||
}
|
||||
defer conn.Close()
|
||||
// ping 成功
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package initFunc
|
||||
|
||||
//检测是否有更新服务程序内容,重新下载安装
|
||||
@@ -0,0 +1,64 @@
|
||||
package initFunc
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
//检查是否安装WebView2,没有安装的话就安装
|
||||
func CheckWebView2() error {
|
||||
cmd := exec.Command("cmd", "/C", "wmic product where \"name='Microsoft Edge WebView2 Runtime'\" get Name")
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// 检查输出是否包含 WebView2 Runtime 的名称
|
||||
if string(output) == "Name\r\nMicrosoft Edge WebView2 Runtime\r\n" {
|
||||
return nil // WebView2 已安装
|
||||
} else {
|
||||
err := runWebView2Installer()
|
||||
return err // WebView2 未安装
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func runWebView2Installer() error {
|
||||
url := "https://suwa3d-website.oss-cn-shanghai.aliyuncs.com/package/WebView2.exe"
|
||||
filePath := "C:\\Program Files\\WebView2.exe"
|
||||
err := downloadFile(url, filePath)
|
||||
if err != nil {
|
||||
return errors.New("下载安装包失败-"+err.Error()) //fmt.Println("Download failed:", err)
|
||||
}
|
||||
cmd := exec.Command(filePath)
|
||||
err = cmd.Run()
|
||||
if err != nil {
|
||||
return errors.New("安装包安装失败-"+err.Error())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
|
||||
func downloadFile(url string, filePath string) error {
|
||||
response, err := http.Get(url)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer response.Body.Close()
|
||||
|
||||
file, err := os.Create(filePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
_, err = io.Copy(file, response.Body)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package initFunc
|
||||
|
||||
import (
|
||||
"crypto/x509"
|
||||
"encoding/pem"
|
||||
"fmt"
|
||||
"os"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
const (
|
||||
X509_ASN_ENCODING = 0x00000001
|
||||
PKCS_7_ASN_ENCODING = 0x00010000
|
||||
CERT_STORE_ADD_REPLACE_EXISTING = 3
|
||||
)
|
||||
|
||||
var (
|
||||
modcrypt32 = syscall.NewLazyDLL("crypt32.dll")
|
||||
)
|
||||
|
||||
// 安装信任证书
|
||||
func SetupCert() {
|
||||
//获取证书路径
|
||||
certPath := "/frontend/public/piserver_root.crt" // 替换为您的证书路径
|
||||
|
||||
// 读取证书文件
|
||||
certFile, err := os.ReadFile(certPath)
|
||||
if err != nil {
|
||||
fmt.Println("无法读取证书文件:", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 解码 PEM 编码的证书
|
||||
block, _ := pem.Decode(certFile)
|
||||
if block == nil {
|
||||
fmt.Println("无法解码 PEM 格式的证书")
|
||||
return
|
||||
}
|
||||
|
||||
// 解析证书
|
||||
cert, err := x509.ParseCertificate(block.Bytes)
|
||||
if err != nil {
|
||||
fmt.Println("无法解析证书:", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 打开证书存储
|
||||
storeHandle, err := syscall.CertOpenSystemStore(0, syscall.StringToUTF16Ptr("ROOT"))
|
||||
if err != nil {
|
||||
fmt.Println("无法打开证书存储:", err)
|
||||
return
|
||||
}
|
||||
defer syscall.CertCloseStore(storeHandle, 0)
|
||||
|
||||
// 将证书添加到存储中
|
||||
err = addCertificateToStore(cert.Raw, storeHandle)
|
||||
if err != nil {
|
||||
fmt.Println("无法将证书添加到存储中:", err)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("证书已成功导入到受信任的根证书颁发机构")
|
||||
}
|
||||
|
||||
func addCertificateToStore(cert []byte, storeHandle syscall.Handle) error {
|
||||
certContext, err := syscall.CertCreateCertificateContext(X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, &cert[0], uint32(len(cert)))
|
||||
if err != nil {
|
||||
return fmt.Errorf("无法创建证书上下文: %v", err)
|
||||
}
|
||||
defer syscall.CertFreeCertificateContext(certContext)
|
||||
|
||||
err = syscall.CertAddCertificateContextToStore(storeHandle, certContext, CERT_STORE_ADD_REPLACE_EXISTING, nil)
|
||||
if err != nil {
|
||||
return fmt.Errorf("无法将证书上下文添加到存储中: %v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package initFunc
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"time"
|
||||
)
|
||||
|
||||
// 执行exe 文件,开启视频监控的服务进程
|
||||
func RunPiServerExe() {
|
||||
// 获取当前目录
|
||||
dir, _ := os.Getwd()
|
||||
applicationPath := dir + "/frontend/public/piServer"
|
||||
//切换到目录
|
||||
os.Chdir(applicationPath)
|
||||
//执行exe的路径
|
||||
exePath := dir + "/frontend/public/piVideo/piVideo.exe"
|
||||
killPiServerExe()
|
||||
time.Sleep(3 * time.Second)
|
||||
cmd := exec.Command(exePath) // 替换为您的可执行文件路径
|
||||
// os.Chdir("piVideo")
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
fmt.Println("执行失败", err.Error(), string(output))
|
||||
} else {
|
||||
fmt.Println("执行成功", string(output))
|
||||
}
|
||||
}
|
||||
|
||||
func killPiServerExe() {
|
||||
// 定义要关闭的程序的名称(或路径)
|
||||
exeName := "piVideo.exe"
|
||||
// 使用exec.Command函数创建一个Cmd结构体,用于执行命令
|
||||
cmd := exec.Command("taskkill", "/f", "/im", exeName)
|
||||
// 将命令的输出和错误连接到当前进程的标准输出和标准错误
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
// 执行命令
|
||||
err := cmd.Run()
|
||||
|
||||
if err != nil {
|
||||
// 如果发生错误,输出错误信息
|
||||
fmt.Println("可能进程并没有开启/关闭视频监控进程Error:", err)
|
||||
}else{
|
||||
fmt.Println("关闭视频监控进程成功")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package initFunc
|
||||
|
||||
//影棚授权扫码
|
||||
func StudioAuthorization() error {
|
||||
return nil
|
||||
}
|
||||
Reference in new issue
Block a user