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