在使用
"github.com/kardianos/service"
將go程式註冊成window服務的時候,對於這時候的程式的工作路徑,如果我們不去獲取,預設當前的路徑就是程式所在的路徑,就會變成發現service程式所在的 c:\windows\system32目錄下,但是如果我們進行了獲取,比如
ospath, _ := exec.lookpath(os.args[0])
那麼此時我們獲取到的反而是程式所在的工作路徑。
通俗的說,我們要讀取程式的配置檔案的話,在不建立服務時,我們可以直接利用一下函式讀取檔案
data, err := ioutil.readfile("config.xml")
這樣程式就會到當前的工作目錄下找config.xml檔案進行解析,如果我們註冊了服務,就會發現此時讀取不到檔案了,因為他會到c:\windows\system32下讀取config.xml 檔案,所以讀取不到,,(這個我還沒搞明白)。
所以說在註冊服務的時候,凡是有關於檔案路徑的相關問題,都需要取他的完全路徑來操作,防止出現上述問題。
在使用beego框架編寫web應用的時候,有一些靜態檔案請求相關的處理方式,beego通過使用
beego.setstaticpath("/view", "views")
來指定靜態檔案的存放路徑,這樣凡是url中請求的時靜態檔案,並且以view開頭,那麼都會到views路徑下找相對應的檔案。
如果我們註冊了服務之後,,同樣會出現上述問題,找不到views路徑。
解決方法(目前我們想的到的)
對於非views路徑,通過加絕對路徑以找到相對應的檔案
對於views檔案通過單獨設定view路徑來解決,通過看原始碼可知,beego預設設定了views路徑為當前工作目錄下的views,所以找不到該路徑的相關資訊。
原始碼
func buildtemplate(dir string, files ...string) error
return errors.new("dir open err")
}beetemplates, ok := beeviewpathtemplates[dir]
if !ok {
panic("unknown view path: " + dir)
解決方法:手動設定views路徑
目前,還沒有明確的明白為什麼會這樣。
註冊golang程式為windows服務
根據網上找的的說法,使用 sc create newservice binpath e myservice.exe type share start auto 可以註冊服務。但是我在服務中選擇啟動,會報error 193 0xc1,使用net start newservice提示 不是有效的 win...
golang下的GOPATH路徑問題
為了方便,我一般使用task來管理專案的編譯等事項,由於才入門go,所以碰到乙個問題,以此篇為記。我需要開發乙個組建,所以 結構沒有src目錄,並且專案放在gopath路徑的src目錄下 我在編譯二進位制檔案的時候使用了下面的命令gopath pwd gobin pwd go install mai...
INNO 讀取可變登錄檔路徑的問題
inno 讀取可變登錄檔路徑的問題 問題 我想自動為 firefox 安裝上 real 的 mozilla 外掛程式 但是它的路徑存放在 hkey current user software mozilla mozilla firefox 1.5 zh cn main install directo...