為何跳過 Windows 9? 原來只因 Microsoft 程式員懶惰!?
本帖最后由 wasd 于 2014-10-2 20:13 编辑https://s2.yimg.com/bt/api/res/1.2/lcDuwZutkMY3PLDy1sp6Eg--/YXBwaWQ9eW5ld3M7cT04NTt3PTYwMA--/http://media.zenfs.com/zh-Hant/homerun/Appappapps.com/017fa85910257560ede65a40624b29e6
下個 Windows 版本不是 Windows 9,而是 Windows 10。究竟為甚麼?Microsoft 沒有說明原因,大部分人估計是因為 “10” 更能表現出這是重大革新。但根據最新消息,真正原因可能不是這麼簡單。
Reddit 一個用戶聲稱是 Microsoft 的開發人員,表示當他們測試 “Windows 9” 這個名稱時出現問題。原來 “Windows 9” 在系統程式碼之中,是 Windows 95 或 98 的簡稱,程式看到 “Windows 9” 就會判定為這兩個陳年舊 Windows。
其實以前也曾經有類似問題出現,包括 Windows 2000。Windows 7 在系統內的代號為 Windows 6.1,也是因為相似的原因。不過這次 Microsoft 決定直接改名為 Windows 10 來解決問題。
本帖最后由 wasd 于 2017-6-17 21:44 编辑
Dulanfai 发表于 2017-6-17 03:37
那個Java bug是誰fix的?是Java更新fix的,不是微軟更新fix的。所以證明微軟不會理會你們掃描不到的問題 ...
我發覺你真是挺強詞奪理的=.=
唉{:7_238:}你真是的, 你完全不明白狀況
第一, 我已經說了『會出錯是因為你沒更新Java』, 我還說『(假設微軟知道這個錯誤的情況下) 你或許猜對了微軟根本不理會這個Java指令』, 那當然是Java公司fix的喇
第二, Java是很特別的, 只要更新了JVM和JRE, 那個Java指令根本不用改寫, 就能正確無誤地執行了
第三, 什麼叫有衝突也不是微軟要考慮的, 你才是放棄邏輯; 怎麼你說的好像我給的if (os.startsWith("Windows 9") 是他們發現的唯一衝突之處!? 我們連微軟在哪個軟件發現衝突也不知道, 我已經說過這只是我舉出的一個例子, 其中一種以OS名稱來檢查Windows版本的方法, 但這個指令不是唯一檢查Windows版本的指令; 我們都不知他們發現有衝突的軟件是否在運行if (os.startsWith("Windows 9") 這個程序; 另外, 我也說過開發OS是要儘量考慮舊時代軟件的支援能力, 簡簡單單不叫Windows 9就可以解決一部分問題, 何樂而不為?
第四, 你怎麼覺得因為沒發現這個Java問題就代表他們不在乎所有的掃描, 這個推論實在是不嚴謹{:7_226:} 我卻認為他們測試的軟件應該都是微軟過去自家出產/或內部實驗室的軟件, 以及一些熱門的軟件 (但用Java寫的其實不多, 大多都是用C-family語言寫的, 而Java主要用在web application和server-side apps的), 微軟不會故意花時間去四處搜羅軟件作測試
第五, 我再說一遍,請你看請楚我為何給出另外幾個例子, 而且我是知道這幾個方法可以有效辨別Windows版本; 那幾個例子所用的方法不會和“Windows 9” 這個名稱有衝突
第六, 我從沒否定『跳過9就是因為8口碑不好』
第七, 你又再無視我的論點了『美國人並不怎麼忌諱6, 因為真正代表撒旦的是666』在美國, 到處都有數字6, 會有6樓但不一定有13樓; 還有我何時『說過要全部美國人都忌諱6所以才合理?』, 你又再一次打稻草人及極端化, 希望你以後能認真理解人家所說才去回覆, 而我是一直說“Windows 9” 名稱衝突的原因更合理
第八, Vista的內核名稱是NT6.0, 就當微軟真的迷信, 覺得Vista出很多問題跟數字6有關; 哪麼我想問你為甚麼Win7的內核名稱仍要叫NT6.1, 而不是直接跳去NT7.0, 明明之前是因為內核名稱有問題啊 (依你所說是NT6.0有問題啊, 不是Vista這個名稱有問題啊); 其實, 即使不叫Win7也不會叫Win6的, 因為微軟不會想正式名稱跟內核名稱(因已有WinNT6.0)有衝突; 更重要的是, 我們在討論為何跳過Windows 9, 9對美國人來說沒什麼特別, 微軟不會因迷信原因跳過9的
第九, 你錯在哪裡我一早已經講清楚, 是你自己沒看到/看不懂! 真心請你看清楚之前的回覆+點評! (我剛看到你在我早前回覆後把自己錯的CODE改了, 但"或"是什麼鬼) 另外, 能解釋||的意思就是程序員{:7_209:}真是笑死人了, 這是Coding101的程度罷了; 其實呢, 這個真心不用解釋, 因為實在是太簡單了, 如果你真心看不懂的話, 你承認, 我就跟你慢慢解釋; 最後, 我並沒有迴避問題, 這程度的代碼真心不用解釋!
第十, 我就想問一問你, 截圖對這個討論有什麼用!? 怕你不死心, 圖我就懶得截了, 我說說我常用甚麼IDE+Editor吧: Visual Studio, Eclipse, VBA, SublimeText, PythonIDE, notepad++
第十一, 你再次暴露了你理解錯問題所在{:7_209:}我不想不斷重重覆覆跟你解釋了, 我不知說過多少次『掃描內核版本(即NT6.x)是可以有效區別Windows版本; 所以叫NT6.4也好, NT10也好, 都無所謂, 甚至叫NT9也行』
第十二, 因為我只是給了那句Java作為論據; 其他程式語言當然有:
Dim OsName As String = My.Computer.Info.OSFullName
Sub GetNAME()
If OsName.Contains("Windows 9") Then
Os = "Windows 95 or 98"
ElseIf OsName.Contains("Windows ME") Then
Os = "Windows ME"
Else
MessageBox.Show(Os & " is not supported.")
Application.Exit()
End If
End Sub
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
For Each objOS In objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
If InStr(objOS.Caption,"Windows 9")>0 Then
Wscript.Echo "The OS is" & objOS.Caption & vbNewLine & _
"Version Number is" & " (" & objOS.Version & ")"
'do sth
End If
Next
var os = (from entry in new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem").Get().Cast<ManagementObject>()
select entry.GetPropertyValue("Caption")).FirstOrDefault();
return os.ToString().Contains("Windows 9") ? os.ToString() : "Unknown";
等等, 還有更多不同組合和變化以及更多我不知道的....
stevencif 发表于 2014-10-4 00:54
你唔係信呀
如果 9 同 95都會攪錯,唔怪得windows咁多bug喇
要佢計數咪好大鑊
阿哥, 你唔係睇唔明咩叫 "startsWith" 啊? 定係你完全無接觸過programing !? 本帖最后由 wasd 于 2017-6-14 19:58 编辑
Dulanfai 发表于 2017-6-14 12:54
哎喲,window7 系統裡面也是win6.1來的啦。老闆要命名什麼就什麼的啦。裡頭系統是什麼根本與名字無關。
...
第一, 我知道那是謠言, 未經證實; 我從沒說過那是事實, 只不過這個謠傳的原因是比較令我信服的一個; 頂樓的內容不是我所寫, 我只是轉貼, 讓大家討論一下; 我是不同意你所說的原因(迷信那個), 我認為這個『謠言』比起你所說的原因更為合理;
第二, 我沒有那麼蠢, 蠢人才會故意把資料忽略; 你自己可以去查一下, 沒有所謂的Win NT 6.4; Win 10 的內核版本的確是Win NT 10 (Win NT 6.4是當時公眾估計的內核版本);
第三, 你說的對啊, 『是怕其他的軟件有衝突,不是怕他們自己掃描不到出問題』; 但是, 我何時說過是微軟掃描不出問題{:7_246:} 這是你的幻想; 而微軟就是知道有這個問題, 所以擔心「其他的軟件有衝突」, 一個新系統的開發是要顧及現有軟件的兼容問題的;
第四, 人人都知道『每個軟件或應用程式都必須更新自己的軟件才能(完全)支持新版Windows的啦』; 然而, 現在的問題是新版Windows的開發是要考慮到盡量支援舊版軟件的能力; 如果完全不支援的話, 沒人願意買新版Windows (要等2-3年後, 舊版軟件已經更新才考慮吧, 況且有些軟件已經不再開發; 你會立即買新版Windows嗎? 微軟會這麼蠢嗎?); 開發OS(作業系統)跟開發軟件是不同的, 要顧慮的問題更多;
第五, 你真的看懂了這段Code !?if (os.startsWith("Windows 9") || os.equals("Windows Me"))這段Code根本不能分辨Windows Me, Windows 95 和 Windows 97, 只要是這3個Windows, 它都會執行指令;
第六, 請你看請楚我為何給出另外幾個例子, 而且我是知道這幾個方法可以有效辨別Windows版本; 補充: 這幾個方法是近5-10年的檢查方法, 而上面的Code則是舊時代的方法. here is how Bill Gate counts
本帖最后由 stevencif 于 2014-10-4 15:27 编辑
wasd 发表于 2014-10-4 04:12
阿哥, 你唔係睇唔明咩叫 "startsWith" 啊? 定係你完全無接觸過programing !?
你的programing都好好喇
用startsWith check到"9"字
不如check到"Windows"喇
重有就係 windows 1.0 都有呀,以你的邏輯,windows 10都係startsWith check到"1"字喎
如果真係咁做,windows的bug就係多到.......
stevencif 发表于 2014-10-4 13:49
你的programing都好好喇
用startsWith check到"9"字
不如check到"Windows"喇
我唔知你對programming有幾多認識啦, 但如果你自認唔係新手的話, 呢個網你有必要知:
https://searchcode.com/?q=if(version,startswith("windows+9")
以前(可能依家都仲有人) 寫既程式係用 startsWith("Windows 9") 去檢查個 OS 係唔係 Win 9X (95 / 98),
依家佢內部測試時就係發現呢個問題, 所以就避開唔叫Windows 9.
至於你講既Windows 1.0 (198x 年出)既問題根本唔存在, 依家仲邊有
a) 人寫程式會檢查你個OS = Win1 or not
b) 舊時代既程式存在 (講緊20幾近30年前既野黎喔)
c) 20-30年前個programming structure都唔係咁
最後想同你講返, 依家check OS既coding應該係類似咁:
-IsWindows8Point1OrGreater
-IsWindowsVersionOrGreater(6,3,0)
- //ensure we're on Windows 7 (6.1)
if (Major > 6) or ((Major = 6) and (Minor >= 1))
windows7 = true
else
windows7 = false;
基本上絕大部分都係檢查 NT Kernel Release ver. no. 黎判斷Windows Version既 sspomg 发表于 2014-10-3 08:45
楼主吾系信呀?
String os = System.getProperty("os.name");
if (os.startsWith("Windows 9") || os.equals("Windows Me")) {
throw new RuntimeException( Win8 = Vista {:9_312:} 原来系甘样。。。WIN8应该好快被淘汰 表示我已经安装了,目前感觉良好... 用Windows 8.1 with Update 1嘅路过……其实用起来仲可以。 系统更新换代得太快了,到了Windows 10啦。 叫咩名都唔緊要,最緊要係好唔好用 楼主吾系信呀?