看板 Python 關於我們 聯絡資訊
新人報到... 系統環境 win10 python 3.9.6 最近一支程式用 pyinstall 打包成 exe 之後 程式內容包含 openfile 的讀寫 路徑也都給予絕對路徑的方式 該exe 新增至工作排程內,手動執行工作排程是正常可以讀寫檔案 該排程的觸發方式是系統重啟之後的「啟動時」 電腦重啟之後,有觸發成功,卻出現回傳錯誤碼 2147942401 Google查到的答案是路徑問題 請問我該怎解決這問題?謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.218.11 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1629803814.A.00F.html 最後放棄,該調整都調了,還是不懂為何不能讀寫
tzouandy2818: 我用pyinstaller打包傳給別人 就算只是hello world 08/25 11:45
tzouandy2818: 也會被判定為病毒 也是用了查到的所有辦法都無解 08/25 11:45
tzouandy2818: 所以還是能用.py就用.py吧 08/25 11:46
我原本的寫 是要寫入 log.txt,但是 一旦有寫入動作就會失敗 目前改用 win32evtlogutil win32evtlog 的套件,寫入 事件檢視器的應用程式紀錄
pmove: 您確定是路徑問題?有沒有可能是權限問題?另外有裝Windows 08/26 16:33
pmove: 內建那套以外的防毒?對了,您路徑裡頭有中文? 08/26 16:33
1. 不能完全確定是路徑問題,但是只要增加讀寫檔案功能就出錯,工作排程給的回應是路徑問題 2. 權限都是給最大,路徑上的目錄都是 everyone 權限全開 3. 路徑沒中文 4. 防毒軟體 NOD32,沒測試移除之後的狀況 ※ 編輯: zbug (220.135.218.11 臺灣), 08/26/2021 21:34:45
lycantrope: 這error是發生在登入前執行? 沒登入有設權限也沒用 08/27 17:14
ncueBenson: 路徑是絕對路徑吧 工作排程器的路徑在system32 如果 08/27 18:29
ncueBenson: 用相對就會寫在那 08/27 18:29
ncueBenson: 工作排程器的路徑不在喔喔漏看內文了 當我沒說話 08/27 18:32
最後依舊是把檔案讀寫的功能放上去,依舊是透過 pyinstall 轉exe 工作排程改...先執行批次檔...再透過批次檔去執行 py轉的exe 然後就成功了...另外測試的時候 有放到 win11...被當病毒封鎖了 XDDDD ※ 編輯: zbug (220.135.218.11 臺灣), 08/27/2021 18:37:11
pmove: 如果把py轉的exe, 在環境變數的path裡加上該路徑試試呢? 08/27 20:39
lepenseur: 路徑要用相對路徑去處理 09/04 06:08
lepenseur: 由於你執行的位置不同,當下的工作目錄(CWD)也不同, 09/04 06:13
lepenseur: 你寫的路徑會有問題 09/04 06:13
lepenseur: 試著用這個方式寫寫看 09/04 06:14
lepenseur: project_root = Path(sys._MEIPASS) if getattr(sys, ' 09/04 06:15
lepenseur: frozen', False) else Path(__file__).absolute().pare 09/04 06:15
lepenseur: nts[0] 09/04 06:15
lepenseur: 在專案開始執行的 py 檔加入上面這一行,可以動態取得 09/04 06:17
lepenseur: 當前目錄的絕對路徑 09/04 06:17
lepenseur: 之後所有的路徑都以這個 py 檔的相對路徑去撰寫,就不 09/04 06:18
lepenseur: 會出錯 09/04 06:18
lepenseur: 像這樣 save_path = project_root / 'log' / 'log_2021 09/04 06:19
lepenseur: 0904.txt' 09/04 06:19
lepenseur: 另外,如果你執行檔是安裝在 C:\Program Files (x86) 09/04 06:25
lepenseur: 或 C:\Program Files 目錄中的話,要記得設定權限才 09/04 06:25
lepenseur: 能寫入你的檔案 09/04 06:25
lepenseur: 被 Windows 當成病毒,大概是因為沒有做程式碼簽署, 09/04 06:27
lepenseur: 但簽署憑證是要花錢買的。如果是自己使用的話,可以把 09/04 06:27
lepenseur: 軟體加入防毒軟體的白名單就好。 09/04 06:27
nsay: 如果不介意名字遠流傳,網路上有教用自然人憑證來簽署也是一 12/29 19:23
nsay: 種方法 12/29 19:23