【发布时间】:2016-10-05 17:54:31
【问题描述】:
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 返回的错误。
//对不起我的英语。
【问题讨论】:
-
“拒绝访问”说明了一切。您正在运行该程序的用户不允许删除该文件。您无法删除可执行文件,因为它已被程序本身使用。
-
在 Linux 中删除是成功的。似乎是特定于 Windows 的错误?
-
有点。 linux 有一个 2 级文件描述符系统 - 您可以删除/替换正在使用的文件,原始文件将作为“幽灵”保留在任何积极使用它的进程中。 windows没有,所以你不能。
-
感谢您的回答。