//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) } }