MONO_EXTERNAL_ENCODINGS, win平台設定無作用

我在windows平台跑mono

Cannot determine the text encoding for the assembly location: C:\Documents and S
ettings\Administrator.XXX\My Documents\下載\Debug\XXX.exe
Please add the correct encoding to MONO_EXTERNAL_ENCODINGS and try again.

我剛看見這錯誤時,沒詳細看,以為是程式編碼的問題。

也有設定set MONO_EXTERNAL_ENCODINGS="utf8;big5;gbk;gb18030;gb2312″

但一樣是丟出上述錯誤。

但其實是路徑的問題,像上述的我放執行檔的路徑裡有個"下載"的中文造成的。

把該執行檔移到D槽或是沒有中文路徑即可透過執行了。

windows平台設MONO_EXTERNAL_ENCODINGS,好像是沒有作用的

學會忽視低能

卡卡洛普,何來閱讀的價值,又手賤常開,
任憑愚蠢文章與蠢人來浪費時間,
任憑自己的注意力失散,花在Line上,看卡卡洛普。
生命與時間與精力真的要花在值得經營的人身上。

當人在抱怨笨蛋時,同時也是一種提醒,現在正在耗注意力又浪費時間
人若愛惜時間,請立即閉上嘴巴,以免壞了自己心情。
蠢人當然幹蠢事。
是否曾在RD,或各樣討厭的笨蛋的面容上有看見智慧。
為何總是想要與愚蠢的人討論智慧
如果一個人推拖、閃事,那已成為一種習慣,
要怎樣對付一個人的習慣?
只能說,愛惜自己,請把生命拿去跟有價值的人多交集…
跟一個心理殘疾的人要辯什麼,過好自己的日子吧。
學會忽視與避開笨蛋是心靈平靜的最佳途徑。
最討厭自己的一點,總會想跟笨蛋說一點什麼
話語無法改變人,何苦要對別人說什麼呢?
修為仍是太低了!光出現在眼前,就會產生想法:就覺得這傢伙是有病吧
明明就僅是一個純綷在浪費別人時間的人。
為什麼眼睛,思慮,要花那麼多時間在這種人身上呢?
談論的價值又何在,偏偏又愛談
任憑低價的人來浪費時間,
對自己要高傲一點。可是這低價的人,有個酒鬼卻是家人
高傲一點,明明就是值得高傲的。
對蠢人還有任何看法就是降低自己的高傲,
即刻閉上自己的嘴巴好嗎

一個人無法承擔他應該承擔的事,甘我屁事呢?
所以岳父應該要姐夫那王八說:沒房子住甘我屁事
我要對酒鬼二哥:喝到爆肝又甘我屁事
要對蠢同事說:做的一蹋糊塗又甘我屁事,我是有多領你那份薪水嗎?
蠢人是先做了什麼?以致莫明就獲得我們的協助與尊重?
尊重也是要去賺來的,但我們卻免費提供。
蠢人就這樣杵著,別人就對他們尊重。
我竟然免費給予我的尊重。
人對免費的心態是輕視的,認為那是低價的
我今後的想法與作法要對自己說:我的時間是有價值的,我的服務是有價的

我撰寫的Code是我成就的表達
一直都認為,寫程式可以提升智能,
但這個前提可能是錯的。
為什麼大家都要掩蓋同事T很蠢的這件事,
痛苦是因為前提出錯
其實就是令人作噁的一個怪人,大家都禁若寒蟬
因他是玻璃心,
幫助低能,反而造成低能養成懶惰、不勞而獲的思想與習慣。
我把那些低能生出的屁事變成了自己的事。
工作上還有成就感與錢,但經營低價值的家人呢?
正常人若踢身體殘障的人一腳,是很過份的事,
,但若是身體健康,但心殘與腦殘的人真會讓人想踢他們一腳。
心殘與腦殘算不算是殘障的一種?
很痛苦是因為,前提出錯了,
低估他人的心智才是正解啊!

提升另一個人的工作能力,也要另一個人願意
救能救的人,
是珍珠而暫時被沾到大便,洗一洗仍是珍珠。
而救一坨大便被沾了珍珠粉的,洗一洗整個洗手台更臭,
這兩者的價值是不同的。

那種陰暗,呆滯與空洞的眼神是思考者的眼神嗎?
對於低能的命運與未來,他的過去,他的思維
有時會很感到興趣對吧!
總會想:他是怎樣把自己搞成現在這種樣子
明明是個傷人與浪費別人時間的人,但宗教卻得從心殘與腦殘的角度,想他那一面,
或許很可憐等等的,或許成長、家庭環境有難堪的一面…等等。

總之要學會忽視低能

你的心情,甘我屁事,讓你不爽總比讓我不爽好

你的心情,甘我屁事,讓你不爽總比讓我不爽好

我知道我兒子很可愛,可以擁抱,但請不要與他親嘴,而且還是男生要親。
我們擔心他感冒,有蛀牙菌,已經說過一次,還故意要親。
已經說過一次,二次,但每次這傢伙出現,我眼睛就要盯他在幹嘛。
已經正面表達父母立場,但卻是用喇塞態度回別人說的話。
什麼吃他口水會健康。大學生的態度怎麼都同一個樣子。
所以有一次我真火大了,用比較強硬語氣對他強調我們父母的立場。

老實說,光畫面就覺得噁心。
我老婆對我說:你有其它選擇,可以用其它更正面的態度。
反省當下是否有其它選擇。我必須說:還真沒有,有些人讓我們當下無從選擇。
這些人前提已經冒犯人了。
像之前姐夫打小孩打到在暴走,要把小孩帶開,還推我,
被推,我當然第一步是抓領口。很難還能笑臉迎人吧
像公司寄生蟲的工作沒交接,沒處理進度,就把工作轉過來,還領薪水呢?
當然對他口氣要強硬一點,
他們希望別人對他們自己的行為,有怎樣的反應呢?
那個大學生,姐夫, 公司寄生蟲,其實都讓在"當下"在現場的人,無從選擇
老婆說,你有其它態度可以選擇
但其實"當下",還真沒有其它方法
讓你不爽總比讓我不爽好。

我們父母自己都只敢親臉頰,生怕他生病。
卻有人企圖讓我兒子生病,感冒或是蛀牙。
被抱走要一直擔心。

我們沒有犯錯,但基督教教義是叫我們反省。
這真會讓心理生病。
許多人希望基督徒是個受氣包
有些冒犯別人姿態還很高,我們基督徒卻要反省。
這會讓心生病吧。

有人要故意致我的小孩於風險之下
我會反擊。
而且已經向他說過父母的立場。
若你傷害我家人,我冒犯你也剛好,
因為你已先冒犯別人。
為了家人,冒犯別人都剛好而已。
前提根本就有問題,根本就是那大學生先冒犯別人
我卻得經常為自己行為在無病呻吟…我當時或許可以用其它態度

我與對方對話時,時常高估對方智能。
像川普可以上台,已經證明常態分佈中間值其實是低能。

我會盡量低估對方的智能

Marshal.PtrToStructure丟出System.AccessViolationException 嘗試讀取或寫入受保護的記憶體

英文錯誤訊息是System.AccessViolationException was unhandled

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

網路上找到關於這錯誤的描述:

AccessViolationException 是一種作業系統層級的嚴重例外狀況,因為侵犯到了其他行程的記憶體,所以程式必須強制關閉。

當程式碼嘗試讀取或寫入尚未配置或其不具存取權的記憶體時,Unmanaged Unsafe 程式碼會發生存取違規。原因通常是指標有錯誤值。並非所有透過錯誤指標讀取或寫入的動作都會導致存取違規,因此存取違規通常指出已透過錯誤指標執行多次讀取或寫入,且該記憶體可能已毀損。因此,存取違規幾乎都會指出嚴重的程式設計錯誤。在 .NET Framework 2.0 版中,AccessViolationException 會明確地辨識這些嚴重錯誤。

Marshal.PtrToStructure丟出這種什麼記憶體的相關錯誤,讓我整個追錯誤的方向都錯掉,其實若原來的c++的char*有亂碼,轉回成c# 的string就會有問題了


近期在簡體中文的Server2012 R2 Datacenteros使用c#叫用winpcappcap_findalldevs函數時,丟出了上述的例外,這個函數是幫你抓出目前所有的網卡。

先是在 System.Runtime.InteropServices.Marshal.PtrToStructure(IntPtr ptr, Type structureType) catch住,

最後更底層是System.Runtime.InteropServices.Marshal.PtrToStructureHelper(IntPtr ptr, Object structure, Boolean allowValueClasses) 丟出。

如果叫用pcap_findalldevs丟出問題。 一套知名的抓封包軟體wireshark應該也會同樣有錯。

沒有,wireshark有正常顯示出網卡,因wiresharkc++寫的,不需再經過PtrToStructureHelper做資料轉換。在網路上另外找一套c#的抓封包軟體,它一樣不能執行。

最後定位到.netPtrToStructure winpcappcap_findalldevs這兩個應該就是問題點。

要嘛一開始winpcap給的指標就錯了,要嘛是.net在把指標轉struct時錯掉。


可以嘗試的解決方法

1.看你的網卡名稱是否含有中文,可用dos指令查看:

wmic path Win32_NetworkAdapterConfiguration get caption,description

中文網卡名稱寫到NDIS層,不曉得是Driver的關係還是怎樣,會變成是亂碼,早在NDIS層時,那個網卡名稱就是亂碼了,所以叫用.netPtrToStructure就轉型失敗。

若是VM就換另一張網卡試試。或是安裝原廠Driver,不要用windows內建的。

上述的dos指令,查出來有個編號,可到機碼

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318},依照剛才查到有中文的網卡編號,找到DriverDesc的欄位,去改掉中文,改掉後記得重開機才會生效。總之想辦法把網卡名稱弄成英文的即可。

2.其實只要透過mono執行,就會發現那個中文的網卡名稱會變成空白,其實是null而沒印出。
mono與.net對於PtrToStructure的處理不相同。mono對於從c++的char*轉c#string有問題的話會變成null。
mono雖然有原始碼,但PtrToStructure遇到從c++的char*轉c#string的詳細作法,我目前的程度還是看不懂在搞些什麼。.net則是轉失敗就丟出例外,可能要籍由刪去法,把原struct的部份欄位註解掉看是struct的哪一個欄位造成轉型失敗。不過還是換用mono跑一下比較快,哪一個是空白的,可能就是該欄位有轉型的問題。我想自己要養成一個習慣.net跑有問題,就用mono跑。

3.剛好winpcap的pcap_findalldevs是c++的,你可以寫c++呼叫看看,看一下c++叫用有沒有問題,結果c++是正常的,看它回傳的指標,用記憶體相關工具看,也都有內容,把網卡名稱印出,結果c++看見有亂碼,這是我才定位到,有可能是網卡名稱亂碼的問題造成的。

4.通常 這樣 的 Exception 多數 是在 C++ 寫的程式才會見到,檢查是否在c#中叫用了 UnManaged DLL

5.程式的權限太低

6.驅動程式問題,更新一下晶片組與相關硬體的Driver,像是寫網路相關的,就更新網卡。

7.不要用ad帳號登入,改用本機登入.

8.關掉DEP功能,資料執行防止

dep

若上圖的方法無法關掉,要改下指令

win7以上 下此指令bcdedit.exe /set {current} nx AlwaysOff

若想改回預設值下:bcdedit.exe /set {current} nx OptIn

9.查事件檢示器是否有相關錯誤訊息

10. pcap_findalldevs回傳的指標,可以用一些記憶體工具去看見該記憶體的位址是否有內容 HxD Hex Editor 這工具,不過我是用GameMaster, 對於此指標也可以試試用Marshal.ReadInt32 讀出看是否有東西。我猜PtrToStructureHelper最後應該也是叫用ReadInt32來作轉換的。猜的因這個ReadInt32在傳進來的指標,會先轉型,轉型失敗變成null,若運算到null,一樣是丟出 AccessViolationException

11.若你一樣是寫網路相關軟體而跳出這錯誤,可以嘗試以管理員權限運行:netsh winsock reset netsh int ip reset 這兩個指令, 當執行完winsock的命令重啟計算機後,IP會消失,所以需要重新配置IP

12.若你一樣是叫用winpcap出問題,我寫這篇文章時,winpcap最新是4.1.3,可能是沒有支援server2012datacenter,你可以嘗試裝一套叫win10pcap的軟體

13 . 強制中止掃毒軟體 , 些掃毒軟體officescan以服務型式在跑,雖然沒有在右下角看見但仍在跑 ,要停掉整個officescan的服務,先排除掃毒軟體的影響,微軟預設也有掃毒,也一併先暫停。

會寫程式的普遍有心理殘疾

就我個人進入資訊公司後個人充滿偏見的觀察,
看見一個現象,除了少數人,普遍會寫程式的人,大多有心理殘疾。
但不清楚是寫程式導致,
還是這心理殘疾有一項好處是有能力寫程式
究竟是心智有問題才成為RD,還是成為RD後,所用電腦開發工具改變了心智。

是不是要有心理上不健康,才能夠寫程式。
還是因為寫程式的關係,造成心理不健康。
沒幾個心理健康又會寫程式。
因為這些程式設計師心理很奇怪,而我又與他們同職業。
難免會自我懷疑,是不是自己哪邊也怪怪,
才有辦法理解程式語言。

普遍個性陰沈、不善與人打交道、易躲開人眼神,自卑與驕傲交雜、死宅宅的神態與嘴臉、
畏首畏尾、扭扭捏捏,含糊不清、長相猥瑣,發生問題時會先說:"沒有人跟我說。"
開發不出來,會怪網路找不到資料,不想承擔又怕別人太優秀
若寫不出來,問別人,跟他說怎麼解,就一副這我老早就會了。
有人看見他寫的不好,主動跟他說,他會回:這樣有當掉嗎?這樣不能運作嗎?
跟無知的人討論知識,他恨你,你也厭惡他。

人低劣的想法與性格成形,豈是另一個人的話話所能改變。
那些想法硬到像在腦裡形成骨頭

不想用我的嘴巴談論無用之人
用時間與睡眠想這些爛人
浪費時間啊!滾開我的世界。
人若愛惜時間,就不要對這樣的人多說什麼,
以免也壞了自己心情。

最可恥的是,個性驕傲但卻是習慣性躲避責任。
許多人都在想,他到底是寫了什麼程式在產品裡頭,
以至於有自信可以驕傲
有時又自卑的好像故意要讓別人認為他沒有能力,
這或許是他想要的。
這樣就不用責擔太多事
要怎樣責怪一個沒有責任感的人,要有責任感

如果蠢人搞不定,不會弄,會推給別人文件寫的不好。
我不喜歡自己的其中之一的個性是想教導蠢人。
甘我屁事。
事情做不好,卻是推給了別人寫的文件,但其它人照文件做就沒事。
程式不能編,也會有錯誤訊息,看錯誤訊息也可以查出原因。
一直怪說文件寫不好,作者坐你旁邊,也不開口問。
因為RD惜話如金,也不擅溝通
我是否曾在RD面容上有看見智慧。
那我為何總是想要與沒有智慧的人討論智慧
如果一個人推拖、閃事,那已成為一種習慣,要怎樣對付一個人的習慣?
只能說你生命不要與這樣的人多有交集…
文件附圖附精美解說,也是能找出麻煩。
總是把錯誤與不能編譯視為浪費了時間,而不是一個學習契機
因為無法與人溝通,有時沒有與任何人討論,
就說是某其它RD寫的文件,造成他工時浪費。
讓其它同事覺得這個人很爛,我想對他而言是好的,但常人真的不能理解
目的是什麼,仔細想想是因為他不想承擔。
不想被看輕,又不想承擔,心理是有多扭曲。

其實心態不健康,家人都是先受害,且也無法凝聚朋友
結果心態不健康的人,都以為貶低別人,或是弄一些小計謀,
他認為他贏了,確定?這種低劣性格不會帶回家?
一個人的個性,咀咒著或是賜福於自己家庭。

前人走了,我接了大部份他的工作,我進步很快。
蠢人有著愛躲避的個性,讓人覺得他無法勝任。
但人進步不是靠躲避事情。
不做事的人,貶低把事做好的人。
太難的事,主管擔心他做不來,如果讓他做不來,他又感覺到挫折。
這樣的人,他想著的是怎麼貶低別人做好的事。
人的才華無法被掠奪,只有貶低他所做的事。

如果我對死宅宅這種厭惡感,其它人就會沒有嗎?
他不也是沒朋友嗎?
主管真的包容性很強。我不是到公司造成主管困擾
不是到公司與人不合,若事生非,還要主管來解決我與別人的衝突
或他交待我的事,我不做,或是做不來。

是的,我有拿薪水,薪水當中包含忍受蠢人
主管可以忍受,為什麼我忍受不了呢?
主管會更難受吧

想了一堆想打臉他的話,可是把心思意念放在這些事上,
一樣是不健康。
不要想惡毒的話,讓自己不健康。
要讓蠢人顯的更蠢,就是不要回他話

環境中如果有一個心態不健康的人,會影響周遭人的心情。
讓健康的人,也開始想惡毒的話。
我不喜歡自己這種想口頭上羞辱別人的個性
我會想貶低別人
我有這樣的心態在其中
為什麼要把自己的眼睛放在蠢人身上。
…因為他太明顯

不要想笨蛋的想法,只有把自己程度也降到與他同樣,
才能想清他的想法。
把自己的一夜好眠,浪費在想蠢人蠢事上
蠢人思維與眾不同,想不透的
若想透了,就要難過了,因為程度降到一樣了

庸才沒有創造力
只會反映問題,而不會解決問題。
若有人比他更被別人器重,上不來,只好拉人下去。
沒有人成長是因為躲閃事,而且又可以被別人看重
承擔下來的事,是下次做事的養份
讓人進步的不會是閃躲飄過的那些事
恨一個人的才華,也拿不走啊,只好拿他做好的事去攻擊
推責任,對自己工作熱情判了愚蠢之刑,扼殺掉自己創意。

跟一個心理殘疾的人要辯什麼,過好我自己的日子

既然RD、程式設計師,是由心理缺陷的一群人組成,
那薪水中就有包含忍受這群怪咖
忍受有人會推事
這是包含情緒療傷的錢

不要試圖證明RD是笨蛋,他會生氣。
有些人真的可以不必看重與在乎
因為會推拖,不太可以信任,交拖重大的事情
越推,程式越不會寫
人就是這樣殺掉自己的創意的吧
但環境會偏坦無能者,因為他是玻璃心。
替蠢人出頭說話的人,自己也變蠢了

我最討厭自己的一點,我會想跟笨蛋說一點什麼
話語無法改變人,我們何苦要對別人說什麼呢?

可以把自己失敗責任推給別人,誰損失了,弄壞了誰的心情?
但那個人的薪情不會怎樣
但這種行為殺掉的是自己的創意、熱情

我沒看見神祝福這樣的人
他們一天充滿著無聊
與我的一天,充滿的熱情可以相比嗎?
他們一天,想著怎樣躲開事,
我的一天,想著怎樣解決事,誰比較開心呢?

制度是處罰認真做事的那一個,他越認真做,他就越要做更多。
蠢人希望自己給別人這種無能形象以躲開事,一方面又厭惡這種形象
他利用我,來建立他自己無能形像。
我在想,怎會有人想要有這種形象
因為這形像對他而言是好的。
這樣可以少做事

C++是為思考者發明的。
創作者本就沒有希望士農工商都能駕馭它
農夫看不懂C++,就能責怪C++作者說太難嗎?

爛人、懶人豈有好事可以分享
薪水中含有與笨蛋相處和被汙辱
學會忽視與避開笨蛋是心靈平靜的最佳途徑

NSIS 授權按鈕多語系

LicenseForceSelection radiobuttons “我同意" “打我啊笨蛋"
這樣只能單語系。
公司產品有要賣給日本人,但日本人英文真爛,
連個按鈕顯示成英文也不行。連這個按鈕都要日文化。

網路上貼的用法是這樣,但我用nsis-3.0b0-setup.exe編不過
LicenseForceSelection /LANG=${LANG_ENGLISH} checkbox “Yes, I accept the terms of the agreement."
LicenseForceSelection /LANG=${LANG_JAPANESE} checkbox “Yes, I accept the terms of the agreement in Japanese"
==================================
下面是我的做法
LangString Iagree ${LANG_ENGLISH} “I agree"
LangString Iagree  ${LANG_TradChinese} “同意此授權"
LangString Iagree  ${LANG_SimpChinese} “同意此授权"
LangString Iagree  ${LANG_Japanese} “同意します"

LangString Idecline ${LANG_ENGLISH} “I decline"
LangString Idecline ${LANG_TradChinese} “不同意"
LangString Idecline ${LANG_SimpChinese} “不同意"
LangString Idecline ${LANG_Japanese} “同意しません"

LicenseForceSelection radiobuttons $(Iagree) $(Idecline)

開啟Intel網卡,抓取封包中VlanID值

如果你用Linux的話,本身就不會濾掉VlanID,就可以直接看

Windows的話比較麻煩。

先找出你的驅動程式版本的前三碼

Intel網站有工具可以協助判斷

判斷Intel網卡Driver類型

或是微軟內建驅動程式詳細資料

Intel網卡版本2

 

到此機碼

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}

從機碼中找出你的Intel主要網卡,不是Trunk虛擬出來的那幾張喔!是"母"網卡

如果你會WMI的話,下語法

SELECT index,description FROM Win32_NetworkAdapterConfiguration

其中index的值,與機碼當中的數字是相關連的。比較快可以查到,到底要將參數設在哪一張網卡的機碼上。

WMI

依照你驅動程式版本的前三碼

e1g, e1e, e1y     MonitorModeEnabled
e1c, e1d, e1k, e1q, e1r, ixe, ixn, ixt     MonitorMode

在該"母"網卡機碼新增一個Dword的值,數字為1

 

重開機後到,Wireshark開雜湊模式收"母"網卡的封包,就能看見VlanID的值了。

但此時因雜湊模式的關係,網路會不通。

有人說解法是再新增一個Trunk的Vlan網卡,但ID值是未設定,網路就能連通。

但這一部份我還沒去驗証。