标题针对go服务访问Windows网络共享盘报找不到网络路径错误小结如下:
Windows服务常见登录身份:本地系统(LocalSystem), 本地服务(LocalService)和网络服务。每种身份访问Windows网络共享盘权限有差别。具体可以参见Windows官方文档。
-
针对于LocalSystem用户访问网络共享盘需要使用Psexec.exe(有的系统不支持)工具切换到LocalSystem用户下挂载
-
命令行下切换LocalSysterm切换PsExec.exe -i -s cmd.exe 映
射Windows网络共享盘运行 net use Z: \ip\www /persistent:yes
- 针对系统管理员用户(Administrator)挂载的Windows网络共享盘,需要更改服务的登录身份为Administrator,
- 修改服务登录身份nssm.exe set hello ObjectName .\Administrator password123456
更
改程序配置Windows网络共享地址http.Handle("/", http.FileServer(http.Dir("\\ip\www")))
- 程序代码和脚本如下:
1.main.go
// staticweb
package main
import (
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir("Z:")))
http.ListenAndServe(":80", nil)
}
- nssm注册服务
set curdir=%~dp0
cd /d %curdir%
echo "install hello service..."
set hello_path=%curdir%\hello.exe
set cfg=%curdir%\config.conf
set stdout=%curdir%\log.stdout
set stderr=%curdir%\log.stderr
%curdir%\nssm.exe install hello %hello_path%
%curdir%\nssm.exe set hello AppDirectory %curdir%
%curdir%\nssm.exeset hello AppParameters --config %cfg%
%curdir%\nssm.exe set hello Start SERVICE_AUTO_START
%curdir%\nssm.exe set hello ObjectName LocalSystem
%curdir%\nssm.exe set hello AppExit Default Restart
%curdir%\nssm.exe set hello AppStdout %stdout%
%curdir%\nssm.exe set hello AppStderr %stderr%
%curdir%\nssm.exe set hello AppRotateFiles 1
%curdir%\nssm.exe set hello AppRotateOnline 1
%curdir%\nssm.exe set hello AppRotateSeconds 3600