How to use a code signing certificate for Windows 10 so that the UAC prompts don't show warnings.
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

70 Zeilen
2.1 KiB

//go:generate goversioninfo -manifest=setup.exe.manifest
//Add new firewall rule in Go.
package main
import (
"os"
"os/exec"
"io/ioutil"
"syscall"
"fmt"
"log"
"static" // Your fileb0x.
)
func main() {
// Grab files from virtual filesystem
files, err := static.WalkDirs("", false)
if err != nil {
log.Fatal(err)
log.Println("ALL FILES", files)
}
// here we'll read the file from the virtual file system
b, err := static.ReadFile("server.exe")
if err != nil {
log.Fatal(err)
}
// Copy file from virtual filesystem to real filesystem
err = ioutil.WriteFile("server.exe", b, 0644)
if err != nil {
fmt.Println("Error creating", "server.exe")
fmt.Println(err)
return
}
// Get current working directory and set it to 'dir'.
dir, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
// Set server file path to 'file'
var file = "-Program '" + dir + "\\server.exe'"
//Create firewall rule if no firewall rule exists.
cmdinstance := exec.Command("powershell.exe", "-WindowStyle", "Hidden", "-Command", "$r", "=", "Get-NetFirewallRule", "-DisplayName", "'Go Web Server'", "2>", "$null;", "if", "($r)", "{write-host 'found rule';}", "else", "{New-NetFirewallRule", "-DisplayName", "'Go Web Server'", "-Direction", "Inbound", file, "-Action", "Allow}")
cmdinstance.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} // Make it silent.
cmdinstance2 := exec.Command("cmd", "/C", "start", "http://localhost:8100")
cmdinstance2.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} // Make it silent.
cmdinstance3 := exec.Command("cmd", "/K", "start", "server.exe")
cmdinstance3.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} // Make it silent.
cmdoutput, cmderr := cmdinstance.Output()
if cmderr != nil {
fmt.Println(cmderr)
fmt.Println(cmdoutput)
}
cmdoutput2, cmderr2 := cmdinstance2.Output()
if cmderr != nil {
fmt.Println(cmderr2)
fmt.Println(cmdoutput2)
}
cmdoutput3, cmderr3 := cmdinstance3.Output()
if cmderr != nil {
fmt.Println(cmderr3)
fmt.Println(cmdoutput3)
}
}