![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 gh .net ![]()
![]() |
有沒有強硬使用指定路徑找尋機碼,不因程序位元數,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 並且額外再寫一支程式一樣的讀取方式,卻讀取的到,差別只在於沒有使用安裝包 |
1樓 |
可以請問你取得rr後要做什麼事嗎?
也許可以用別的方式取得
本篇文章回覆於2017-05-23 11:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
作者回應
gh .net ![]() |
rr是為了取得機碼InstallSource
再為了取得安裝來源路徑上的其他檔案 後續繼續測試發現 從另一支只讀取機碼的程式 並且也是透過安裝包 對應x86 .net版本也一樣 讀取的到 但是慢慢複製貼上其他程式碼 安裝包包含的東西加上去後就會發現無法讀取 並且發現 安裝時偶爾會出現windows install異常 找尋問題 但讀取完就消失也沒錯誤報告 事件檢視器顯示安裝成功 沒有其他錯誤 後續把安裝包容量降低 就可以正常了 想請問 問題的原因到底是什麼
本篇文章回覆於2017-05-25 09:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓 |
不知道你有沒有自己建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樓
最有價值解答
小兔斑比 ![]() ![]() |
會不會你在抓取機碼的時候他其實還沒建立完成?
有沒有試試看在Commit做這件事? public override void Commit(IDictionary savedState) { base.OnCommitted(savedState); ... }
本篇文章回覆於2017-06-01 13:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |