台灣最大程式設計社群網站
線上人數
988
 
會員總數:246713
討論主題:190131
歡迎您免費加入會員
討論區列表 >> C# >> c# RegistryKey
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
c# RegistryKey
價值 : 10 QP  點閱數:1149 回應數:6
樓主

gh .net
門外漢
0 22
166 16
發送站內信

問題:
有沒有強硬使用指定路徑找尋機碼,不因程序位元數,OS位元數,CPU位元數而有所變化
或是有其他方式

環境:
VS 2015
VS windows installer project
安裝包,包裝程式
安裝結束後自動執行程式
程式會讀取登錄檔HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\程式prodcode




測試環境:
程式與安裝包 都有因OS系統而設定相應位元平台,x64或是x86,沒使用anycpu
VMware cpu64bit
OS:
Win10 64bit 正常
Win7 32bit 正常
Win7 64bit 正常
Win10 32bit rr會抓不到機碼 總是null
並且額外再寫一支程式一樣的讀取方式,卻讀取的到,差別只在於沒有使用安裝包


搜尋相關Tags的文章: [ registry ] , [ 登錄檔 ] , [ install ] ,
本篇文章發表於2017-05-22 20:08
1樓
回應

小兔斑比
捐贈 VP 給 小兔斑比 檢舉此回應
可以請問你取得rr後要做什麼事嗎?
也許可以用別的方式取得
本篇文章回覆於2017-05-23 11:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

gh .net
檢舉此回應
rr是為了取得機碼InstallSource
再為了取得安裝來源路徑上的其他檔案

後續繼續測試發現 從另一支只讀取機碼的程式 並且也是透過安裝包 對應x86 .net版本也一樣 讀取的到
但是慢慢複製貼上其他程式碼 安裝包包含的東西加上去後就會發現無法讀取
並且發現 安裝時偶爾會出現windows install異常 找尋問題 但讀取完就消失也沒錯誤報告 事件檢視器顯示安裝成功 沒有其他錯誤
後續把安裝包容量降低 就可以正常了
想請問 問題的原因到底是什麼
本篇文章回覆於2017-05-25 09:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

小兔斑比
捐贈 VP 給 小兔斑比 檢舉此回應
不知道你有沒有自己建Log看看呢?
安裝後你去"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\程式prodcode",有找到這個機碼嗎?
有的話試試在安裝的時候隨便建一個Log檔案把你安裝要用的資料匯出看看(例如Formdir以及Context.Parameters["productcode"] + " \"" + installdir + @"\bin" + "\""以及_prodcode)
ps.有沒有可能是路徑有存在中文? 我好像試過來源路徑有中文就沒辦法取得..
另外這個我沒測試過,來源路徑不能用平常用的"Environment.CurrentDirectory"嗎?
當初用setup project的時候用了超級久,但你發生的問題我也沒發生過,這樣不知道能不能幫到你
本篇文章回覆於2017-05-31 09:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

gh .net
檢舉此回應
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\程式prodcode"
這段我有輸出log的確有抓出prodcode

"new ProcessStartInfo(Formdir, Context.Parameters["productcode"] + " \"" + installdir + @"\bin" + "\"");"
這段只是執行我安裝包所解壓出的程式檔案

目前問題主要是msi檔過大(200MB),會導致windows installer發生異常,卻又沒有任何明確錯誤訊息
並且異常後一樣有正常取得prodcode卻沒辦法取得機碼 "RegistryKey rr = rs.OpenSubKey" <--總是null
相同程式但是將msi包含的檔案降低(只剩20MB) "RegistryKey rr = rs.OpenSubKey" 卻是正常的
(我有另寫一程序,一樣取用機碼程式碼,.net,透過安裝包,可以正常。但是當我將程式碼、其餘所需檔案加入後,又不行了)

想找尋問題的根源
本篇文章回覆於2017-05-31 16:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

gh .net
檢舉此回應
"RegistryKey rr = rs.OpenSubKey" <--總是null
所以沒辦法抓出資料

所有存取路經皆無中文
本篇文章回覆於2017-05-31 16:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
最有價值解答

小兔斑比
捐贈 VP 給 小兔斑比 檢舉此回應
會不會你在抓取機碼的時候他其實還沒建立完成?
有沒有試試看在Commit做這件事?

public override void Commit(IDictionary savedState)
{
base.OnCommitted(savedState);

...
}

本篇文章回覆於2017-06-01 13:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.