作者HuangJC (吹笛牧童)
站內Programming
標題Re: [問題] 如何用程式修改環境變數PATH(winxp)?
時間Fri Dec 2 16:10:51 2011
第一次來到貴板,拜個碼頭先~ <(_ _)>
※ 引述《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)
1F:→ HuangJC:啊..那是導入 version.exe 的檔案內容.. 60.251.197.63 12/02 16:17
2F:→ HuangJC:而不是導入執行結果,難怪 60.251.197.63 12/02 16:17
3F:推 DeathBook:環境變數是一種遺傳的樹狀結構,每個程式 112.104.47.132 12/02 22:43
4F:→ DeathBook:執行時會從上一代的process copy一份下 112.104.47.132 12/02 22:43
5F:→ DeathBook:來,系統不允許改變上一代的環境變數,實 112.104.47.132 12/02 22:44
6F:→ DeathBook:務作法是在程式中修改或用自已的取代上 112.104.47.132 12/02 22:45
7F:→ DeathBook:一代傳下來的那一份環境變數 112.104.47.132 12/02 22:46
這就是主要困擾
8F:→ DeathBook:以前在dos可以設法取得系統的第一代環境 112.104.47.132 12/02 22:47
9F:→ DeathBook:變數的實體位址,再偷偷塞進去,windows就 112.104.47.132 12/02 22:47
10F:→ DeathBook:不能這樣子作了 112.104.47.132 12/02 22:48
我猜是保護模式,保護了不能侵犯別的行程空間
11F:→ DeathBook:你可以用exec的方式call version.exe 112.104.47.132 12/02 22:48
12F:→ DeathBook:然後可以指定argc,argv和envp 112.104.47.132 12/02 22:49
這裏就看不懂了
exec 是 dos 指令?
※ 編輯: HuangJC 來自: 223.140.249.181 (12/02 23:26)
13F:推 DeathBook:exec泛指一群可用來把程式載入的fuction 112.104.47.132 12/03 00:24
14F:→ DeathBook:call ,詳細去查書 112.104.47.132 12/03 00:25
那不夠啊,因為我已經用了不少,不過是 c call
今天問題是發生在想把環境變數傳回 dos 下
argc,argv 我會用
我還以為是我會用的部份不夠多
如果是 from c read dos env (類似 getenv) , 那並沒解決問題
目前就是 setenv 辦不到傳回母程序
read 和 write 方向並不一樣,我要解的問題是寫回 dos 那個方向
※ 編輯: HuangJC 來自: 223.140.249.181 (12/03 01:23)
15F:推 LPH66:話說既然試過 < 不行何不試試 | 140.112.28.91 12/03 22:12
16F:→ LPH66: @version.exe | set /p ver (沒試過就是了 140.112.28.91 12/03 22:13
17F:→ HuangJC:不行;把 version.exe 換成 echo ttt 好了 114.26.153.133 12/03 22:14
18F:→ HuangJC:反正就輸出 ttt ; 可以馬上試一下 114.26.153.133 12/03 22:14
19F:推 LPH66:嗯 隨手測了一下果然不行... 140.112.28.91 12/03 22:15
我這招雖然繞了一圈,倒是有解掉問題 XD
如果要很複雜的批次檔,是會引入其他語言?
因為我看同事導入的系統,要先安裝 perl
我現在凡做不到的事,都要先寫個執行檔,累
當然也想過,全用執行檔,別弄批次檔架構了
執行檔的好處是我可以步進執行,又好看變數
批次檔的好處是不用 build,一下就改一點點東西
兩邊一直拉距
說真的,只想拷個小檔案,只想執行另一個程式
叫我寫 c code,很懶耶
※ 編輯: HuangJC 來自: 114.26.153.133 (12/03 22:21)