如何在Windows中删除自身(可执行文件)?

时间:2016-10-05 17:54:31

标签: windows go

package main

import "os"

func main() {
    err := os.Remove(os.Args[1])
    if err != nil {
        panic(err)
    }
}

编译此

  

GOOS = windows GOARCH = 386 go build test.go

然后在葡萄酒上运行

Z:\tmp>test.exe test.exe
fixme:process:SetProcessPriorityBoost (0xffffffff,1): stub
panic: remove test.exe: Access denied.

goroutine 1 [running]:
panic(0x462c40, 0x5b3f9ca0)
    /usr/local/go/src/runtime/panic.go:500 +0x331
main.main()
    /tmp/test.go:8 +0x70

Z:\tmp>fixme:console:CONSOLE_DefaultHandler Terminating process 8 on event 0

我认为"好吧,它的葡萄酒"并在VirtualBox上的Win XP中运行。但是,Windows中的错误会重新出现。

//对不起我的英文。

1 个答案:

答案 0 :(得分:1)

使用CreateProcess函数,可以使用syscall包在Go中编写:

package main

import (
    "fmt"
    "syscall"
    "os"
)

func main() {
    // write your code here 
    // <----
    fmt.Println("Blah Blah Blah")
    // ---->
    var sI syscall.StartupInfo
    var pI syscall.ProcessInformation
    argv := syscall.StringToUTF16Ptr(os.Getenv("windir")+"\\system32\\cmd.exe /C del "+os.Args[0])
    err := syscall.CreateProcess(
        nil,
        argv,
        nil,
        nil,
        true,
        0,
        nil,
        nil,
        &sI,
        &pI)
    if err != nil {
        fmt.Printf("Return: %d\n", err)
    }
}