iT邦幫忙

7

[鼠年全馬] W16 - 工作日常 - 不要再跟我抱歉了QQ

插播一篇我自己在工作上遇到的問題
我相信不會只有我遇到
提供給大家問題分析及解決流程
日後若遇到可以有個對照方式去處理
/images/emoticon/emoticon20.gif/images/emoticon/emoticon20.gif/images/emoticon/emoticon20.gif


#起源

狀況是這樣的
我接手了一個前輩的單機程式
vs工具開發, 語言是C#

這程式原本都好好的
沒什麼發病

突然有一天牙起來
使用者反映程式跳了一個視窗
"抱歉!此功能必須安裝Microsoft Office 2010以上方可使用!"
https://ithelp.ithome.com.tw/upload/images/20200514/20118686SJHLKD6QrE.png

於是乎我就去檢查他電腦裡是不是有安裝Word
結果勒, 不只有裝, 還裝到了Office 2016
連我自己電腦裡都只有2010的/images/emoticon/emoticon10.gif

好吧, 看來要來Debug了...


#抓蟲摟~

要除蟲必先抓蟲
老實說這程式交與我手, 也從來沒把整段程式看完過xD
碼海茫茫要如何找到我想要的
幸好, 已經有線索了
"抱歉!此功能必須安裝Microsoft Office 2010以上方可使用!"

咱來Ctrl+F再Ctrl+V一下
果然馬上找到, 真棒/images/emoticon/emoticon07.gif
https://ithelp.ithome.com.tw/upload/images/20200514/20118686n1VtY0VuyP.jpg

而在跳出這個錯誤訊息之前
有一段程式去檢測了 Word的登錄碼
https://ithelp.ithome.com.tw/upload/images/20200514/20118686axqEVYXzp8.jpg
目前檢測了 2010 & 2013 & 2016 三種版本是否存在登錄碼

且在我本機(有安裝Office 2010)執行
確實可以抓的到akey_2010這個RegistryKey
但, 使用者電腦的是Office 2016...
於是我只好忍痛砍了我的2010/images/emoticon/emoticon02.gif
再見了2010, 你好啊2016~
https://ithelp.ithome.com.tw/upload/images/20200514/20118686rFOsLrInyr.png

安裝完之後再來執行一次程式
竟然!!!!!
"抱歉!此功能必須安裝Microsoft Office 2010以上方可使用!"
https://ithelp.ithome.com.tw/upload/images/20200514/20118686SJHLKD6QrE.png

我有裝Office你別跟我抱歉阿!!/images/emoticon/emoticon36.gif

實際開了Word確認看看是不是真的有裝好
https://ithelp.ithome.com.tw/upload/images/20200514/20118686sTFlcyTIKo.png

真的裝好了...

到底為什麼抓不到登錄碼...

自己想破頭也找不到原因, 只好請教估狗大神
而估狗大神也完美的幫我找到了解答
https://ithelp.ithome.com.tw/upload/images/20200514/20118686XYtkvYNDS7.jpg

看的懂嗎? 我英文初級都沒過是看不太懂, 所以我用了機翻/images/emoticon/emoticon07.gif
https://ithelp.ithome.com.tw/upload/images/20200514/20118686DfO9A8yo8g.jpg

這樣應該勉強能看懂
原因出在程式本身開發時就設定32位元
32位元環境下程式碼就自動編譯了這個路徑
多了WoW6432Node這段
那多了這段, 想當然爾, 身為64位元的Office 2016是絕對抓不到的

於是乎, 這蟲就這麼給抓到了/images/emoticon/emoticon34.gif


#為民除蟲

抓到了蟲, 要怎麼除呢?
首先程式肯定是要改成64位元可以使用的
於是平台的部分原本是x86就改為Any CPU
https://ithelp.ithome.com.tw/upload/images/20200514/20118686syEtruYtzp.jpg

但不改還好, 改下去夭壽, 一窩蜂問題立馬跑出來/images/emoticon/emoticon46.gif

還好我還扛的住
有發現問題都出自同一人之手
就是 Microsoft.Office.Core
不要問我怎麼知道的
只要把他的參考原為14.0更新成16.0就好
更新更起來!!
https://ithelp.ithome.com.tw/upload/images/20200514/20118686KuX985KX3q.png

你以為結束了嗎? 我以為是, 但卻還沒結束
因為我家是用Oracle DB, 就牽涉到了 Provider的問題
原本的ProviderMSDAORA.1
https://ithelp.ithome.com.tw/upload/images/20200514/20118686MfuRe7FoJr.jpg
但因為MSDAORA只支援32位元
所以要換個可以支援64位元的Provider - OraOLEDB.Oracle
https://ithelp.ithome.com.tw/upload/images/20200514/201186867eXYd3REmg.jpg
這問題就能解決了!!

於是我啟動了程式, 執行也沒問題, 也不再跳錯誤了, 完美!!/images/emoticon/emoticon12.gif


#結束(?)

你以為結束了嗎? 這麼簡單我還要發這篇文嗎?

本來是可以就這樣結束結案掉的
誰知道!!在我裝回Office2010之後竟然又跳出來
"抱歉!此功能必須安裝Microsoft Office 2010以上方可使用!"
https://ithelp.ithome.com.tw/upload/images/20200514/20118686SJHLKD6QrE.png
我的天哪!!/images/emoticon/emoticon06.gif

就在我瀕臨崩潰之際, 一道光從我天靈蓋噴出來
原來我千算萬算, 卻漏算了它 - WoW6432Node

我們已經知道在64位元時的路徑是這樣:
SOFTWARE\Microsoft\Office\14.0\Word\InstallRoot\
而32位元時路徑會被自動轉譯成這樣:
SOFTWARE\WoW6432Node\Microsoft\Office\14.0\Word\InstallRoot\

所以當我在x64時要去抓32位元的Office, 當然也是抓不到
因為64位元沒有自動轉譯阿!!!/images/emoticon/emoticon50.gif

最後我在檢測登錄碼的地方加上了32位元的檢測路徑
程式總算是不再跟我抱歉了...


解這問題花了我大半天時間...
也讓我學到蠻多東西
而且也不能說是前輩寫的Code有問題
在當時的環境下, 可能就只能用32位元

說不準幾年後出了128位元 256位元
我們開發的64位元系統也被後輩拿來嘴/images/emoticon/emoticon16.gif

共勉之~


1 則留言

1

這篇好舒壓 ╰( ̄▽ ̄)╭

餅乾 iT邦新手 5 級 ‧ 2020-05-28 11:47:29 檢舉

/images/emoticon/emoticon07.gif

我要留言

立即登入留言