Re: [問題] 如何用程式修改環境變數PATH(winxp)?

看板Programming作者 (吹笛牧童)時間13年前 (2011/12/02 16:10), 編輯推噓4(4015)
留言19則, 3人參與, 最新討論串2/2 (看更多)
第一次來到貴板,拜個碼頭先~ <(_ _)> ※ 引述《bobhsiao (㊣小臃腫㊣)》之銘言: : 請問有這樣的api可以直接修改 WinXP 的環境變數 PATH 嗎? : 我想做到類似的功能: : PATH = %PATH%;C:\NEWPATH; : 除了手動去 "我的電腦=>內容=>進階=>環境變數" 內修改?? : 不論是用 win32sdk, perl, 批次檔 都可以,只要能達到目的。 : 先謝了。 炒一下冷飯,這問題最近我有需要,不只用在 path 有解了,繞一圈,不曉得有沒有更佳解? @version.exe > ver.txt @set /p ver= < ver.txt @del ver.txt 第一行,任何執行檔,想法子 text out 到一個檔案去 第二行 /p 就是輸入,但我用外部檔案取代鍵盤輸入 XD 第三行,刪除暫存檔 好辛苦喔~ 我有試過 @set /p ver < version.exe 但是失敗了... -- 活動/美食計劃 蘭嶼 魚白 勝興車站 星月天空 武陵 四湖焢窯 草嶺古道 嘉義阿里山小火車 保齡球  司馬庫斯 草屯焢窯 2011/10 手包水餃 日月潭纜車 合歡攻頂 馬祖 鹽山 南庄 澎湖 溪頭/松林町 南投天梯 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.251.197.63 ※ 編輯: HuangJC 來自: 60.251.197.63 (12/02 16:15)

12/02 16:17, , 1F
啊..那是導入 version.exe 的檔案內容..
12/02 16:17, 1F

12/02 16:17, , 2F
而不是導入執行結果,難怪
12/02 16:17, 2F

12/02 22:43, , 3F
環境變數是一種遺傳的樹狀結構,每個程式
12/02 22:43, 3F

12/02 22:43, , 4F
執行時會從上一代的process copy一份下
12/02 22:43, 4F

12/02 22:44, , 5F
來,系統不允許改變上一代的環境變數,實
12/02 22:44, 5F

12/02 22:45, , 6F
務作法是在程式中修改或用自已的取代上
12/02 22:45, 6F

12/02 22:46, , 7F
一代傳下來的那一份環境變數
12/02 22:46, 7F
這就是主要困擾

12/02 22:47, , 8F
以前在dos可以設法取得系統的第一代環境
12/02 22:47, 8F

12/02 22:47, , 9F
變數的實體位址,再偷偷塞進去,windows就
12/02 22:47, 9F

12/02 22:48, , 10F
不能這樣子作了
12/02 22:48, 10F
我猜是保護模式,保護了不能侵犯別的行程空間

12/02 22:48, , 11F
你可以用exec的方式call version.exe
12/02 22:48, 11F

12/02 22:49, , 12F
然後可以指定argc,argv和envp
12/02 22:49, 12F
這裏就看不懂了 exec 是 dos 指令? ※ 編輯: HuangJC 來自: 223.140.249.181 (12/02 23:26)

12/03 00:24, , 13F
exec泛指一群可用來把程式載入的fuction
12/03 00:24, 13F

12/03 00:25, , 14F
call ,詳細去查書
12/03 00:25, 14F
那不夠啊,因為我已經用了不少,不過是 c call 今天問題是發生在想把環境變數傳回 dos 下 argc,argv 我會用 我還以為是我會用的部份不夠多 如果是 from c read dos env (類似 getenv) , 那並沒解決問題 目前就是 setenv 辦不到傳回母程序 read 和 write 方向並不一樣,我要解的問題是寫回 dos 那個方向 ※ 編輯: HuangJC 來自: 223.140.249.181 (12/03 01:23)

12/03 22:12, , 15F
話說既然試過 < 不行何不試試 |
12/03 22:12, 15F

12/03 22:13, , 16F
@version.exe | set /p ver (沒試過就是了
12/03 22:13, 16F

12/03 22:14, , 17F
不行;把 version.exe 換成 echo ttt 好了
12/03 22:14, 17F

12/03 22:14, , 18F
反正就輸出 ttt ; 可以馬上試一下
12/03 22:14, 18F

12/03 22:15, , 19F
嗯 隨手測了一下果然不行...
12/03 22:15, 19F
我這招雖然繞了一圈,倒是有解掉問題 XD 如果要很複雜的批次檔,是會引入其他語言? 因為我看同事導入的系統,要先安裝 perl 我現在凡做不到的事,都要先寫個執行檔,累 當然也想過,全用執行檔,別弄批次檔架構了 執行檔的好處是我可以步進執行,又好看變數 批次檔的好處是不用 build,一下就改一點點東西 兩邊一直拉距 說真的,只想拷個小檔案,只想執行另一個程式 叫我寫 c code,很懶耶 ※ 編輯: HuangJC 來自: 114.26.153.133 (12/03 22:21)
文章代碼(AID): #1Es8WFfM (Programming)
文章代碼(AID): #1Es8WFfM (Programming)