2018年2月18日 星期日

win10 降級為家用版

win10 家用版,誤用序號升級為其他版本後,想降回家用版。
若在「更新與安全性」->「復原」,有回復前一版本的選項,可先執行看看能否復原。

但若無回復前一版本的選項,則可使用重新安裝的方式降回家用版。
一般情況,降級重新安裝,只能選擇「只保留個人檔案」或「不保留任何項目」進行重新安裝,自己安裝的程式、設定,都會不見。






所以下面是藉由修改系統註冊表(登入編輯程式)後,讓系統以為目前系統是 win10 家用版,再進行重新安裝。
以保留原本的程式、設定、檔案。
(操作前,建議進行系統備份,避免發生問題)
  1. 執行「regedit」,打開系統注冊表。
    在「電腦\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion」:

    EditionID 的値修改為 「Core
    ProductName 的値修改為 「Windows 10 Home

    也在「電腦\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion」:

    EditionID 的値修改為 「Core
    ProductName 的値修改為 「Windows 10 Home
  2. 到微軟網站下載win10安裝程式的媒體建立工具(media creation tool),
    https://www.microsoft.com/zh-tw/software-download/windows10
  3. 下載完應該會有一個 MediaCreationTool.exe 檔案,執行 MediaCreationTool.exe,做一些設定後,便會開始下載 win10 安裝程式。




    選擇「建立另一部電腦的安裝媒體」



    選擇建立 ISO 檔案




  4. 在下載的 Windows.iso 檔案上,按右鍵選擇用檔案總管開啟(有的似乎是win10右鍵選單有「掛接」可以選)
  5. 打開掛載的 win10 ISO 安裝檔後,執行「setup.exe」


    選擇現在不取得更新




  6. 最後,確認安裝資訊是否正確,安裝家用版保留個人檔案與應用程式,確認無誤,即可按安裝,安裝完成後,系統應該就會降回家用版。
    注意:若安裝資訊跟下圖不一樣,例如不是安裝家用版、不是保留個檔案與應用程式,請再次檢查系統系統註冊表(登入編輯程式)的修改是否正確。(也有可能原本已修改,但放太久,系統又自動改回原本的)







slui 4 無反應,指令啟用 win10

情況:
原本 win7 升級 win10,後來換硬體,win10 變為未啟用狀態。
購買新的彩盒版win10,輸入新的序號亦無法啟用。
致電微軟客服,執行「slui 4」指令,卻無反應,叫不出電話啟動的畫面,只好另行他法。


解決:
執行「slmgr /dlv」查看授權資訊,發現部分產品金鑰,不是新買的金鑰,覺得怪怪的,改用指令嘗試,結果成功啟用。
  1. 安裝新的金鑰:
    slmgr.vbs /ipk 新金鑰
  2. 線上啟用:
    slmgr.vbs /ato



其他參考:



2017年12月17日 星期日

MySQL 時間函數 NOW() 和 SYSDATE() 的差異

NOW():返回該句 SQL(或stored function、trigger ) 開始執行的時間。
SYSDATE() :返回執時到此函式的時間。

所以,
一句 SQL 有多個 NOW(),返回值一定相同;
一句 SQL 有多個 SYSDATE(),返回值不一定相同,會受執行花費時間影響。


NOW()不管在何處,返回時間都一樣。
mysql> SELECT NOW(), SLEEP(2), NOW();
+---------------------+----------+---------------------+
| NOW()               | SLEEP(2) | NOW()               |
+---------------------+----------+---------------------+
| 2006-04-12 13:47:36 |        0 | 2006-04-12 13:47:36 |
+---------------------+----------+---------------------+



SYSDATE() 返回執行到該函式的時間,所不一定相同。
mysql> SELECT SYSDATE(), SLEEP(2), SYSDATE();
+---------------------+----------+---------------------+
| SYSDATE()           | SLEEP(2) | SYSDATE()           |
+---------------------+----------+---------------------+
| 2006-04-12 13:47:44 |        0 | 2006-04-12 13:47:46 |
+---------------------+----------+---------------------+



參考:MySQL :: MySQL 5.7 Reference Manual :: 12.7 Date and Time Functions
「NOW() returns a constant time that indicates the time at which the statement began to execute.
(Within a stored function or trigger, NOW() returns the time at which the function or triggering statement began to execute.
This differs from the behavior for SYSDATE(), which returns the exact time at which it executes.」


PHP、MySQL,IP 轉整數存資料庫

MySQL
INT:0 ~ 4294967295
mysql> SELECT INET_ATON("0.0.0.0"); #0
mysql> SELECT INET_ATON("255.255.255.255"); #4294967295
mysql> SELECT INET_NTOA("0"); #0.0.0.0
mysql> SELECT INET_NTOA("4294967295"); #255.255.255.255
註:
INET_ATON = Address to number
INET_NTOA = Number to Address



PHP(32 bit)
INT:-2147483648 ~ 2147483647
var_dump(ip2long("0.0.0.0")); #int(0)
var_dump(ip2long("127.255.255.255")); #int(2147483647)
var_dump(ip2long("255.255.255.255")); #int(-1)
var_dump(ip2long("128.0.0.0")); #int(-2147483648)
var_dump(long2ip(0)); #string(7) "0.0.0.0"
var_dump(long2ip(2147483647)); #string(15) "127.255.255.255"
var_dump(long2ip(-1)); #string(15) "255.255.255.255"
var_dump(long2ip(-2147483648)); #string(9) "128.0.0.0"
因為在32位元系統,PHP int 型態有分正負號(signed),
範圍為 -2147483648 ~ 2147483647(http://php.net/manual/en/function.intval.php)

可用 sprintf(%u) 轉換成不帶正負號的 (unsigned) 的10進制字串,
可轉成:"0" ~ "4294967295"
var_dump(sprintf("%u", ip2long("0.0.0.0"))); #string(1) "0"
var_dump(sprintf("%u", ip2long("127.255.255.255"))); #string(10) "2147483647"
var_dump(sprintf("%u", ip2long("255.255.255.255"))); #string(10) "4294967295"
var_dump(sprintf("%u", ip2long("128.0.0.0"))); #string(10) "2147483648"
var_dump(long2ip(0)); #string(7) "0.0.0.0"
var_dump(long2ip(2147483647)); #string(15) "127.255.255.255"
var_dump(long2ip(4294967295)); #string(15) "255.255.255.255"
var_dump(long2ip(2147483648)); #string(9) "128.0.0.0"



PHP(64 bit)
INT:0 ~ 4294967295
var_dump(ip2long("0.0.0.0")); #int(0)
var_dump(ip2long("127.255.255.255")); #int(2147483647)
var_dump(ip2long("255.255.255.255")); #int(4294967295)
var_dump(ip2long("128.0.0.0")); #int(2147483648)
var_dump(long2ip(0)); #string(7) "0.0.0.0"
var_dump(long2ip(2147483647)); #string(15) "127.255.255.255"
var_dump(long2ip(4294967295)); #string(15) "255.255.255.255"
var_dump(long2ip(2147483648)); #string(9) "128.0.0.0"

在 64 位元的 PHP,int 最大值可到 9223372036854775807,
有無用 sprintf(%u) 不影響轉出的數字範圍
var_dump(sprintf("%u", ip2long("0.0.0.0"))); #string(1) "0"
var_dump(sprintf("%u", ip2long("127.255.255.255"))); #string(10) "2147483647"
var_dump(sprintf("%u", ip2long("255.255.255.255"))); #string(10) "4294967295"
var_dump(sprintf("%u", ip2long("128.0.0.0"))); #string(10) "2147483648"
var_dump(long2ip(0)); #string(7) "0.0.0.0"
var_dump(long2ip(2147483647)); #string(15) "127.255.255.255"
var_dump(long2ip(4294967295)); #string(15) "255.255.255.255"
var_dump(long2ip(2147483648)); #string(9) "128.0.0.0"

[其他測試]
64 位元的 PHP 將 32 位元的負數結果轉回 IP,似乎也可正常執行(環境:PHP 7.0.12)
var_dump(long2ip(-1)); #string(15) "255.255.255.255"
var_dump(long2ip(-2)); #string(15) "255.255.255.254"
var_dump(long2ip(-3)); #string(15) "255.255.255.253"
var_dump(long2ip(-2147483647)); #string(9) "128.0.0.1"
var_dump(long2ip(-2147483648)); #string(9) "128.0.0.0"


結論:
  1. IP 轉數字存進 MySQL,MySQL 欄位建議使用 INT UNSIGNED,只須 4 bytes,儲存範圍剛好 0~4294967295
  2. 可用 MySQL INET_ATON() 將IP處理成數字存入。
  3. 或先用 PHP long2ip() 處理成數字(要相容 32bit PHP,則long2ip的值須再用 sprintf(%u) 處理)

參考:

Linux、Windows 設定自動關機時間

[Linux]
設定 100 分鐘後自動關機
shutdown -h +100

當天20:15關機
shutdown -h 20:15

清除自動關機設定
shutdown -c

查看自動關機設定
=>Active: active (running) 表示有正在倒數計時的關機設定
=>Active: inactive (dead) 表示無執行中的設定
systemctl status systemd-shutdownd

不真的關機,僅發出關機通知訊息
shutdown -k 23:55


參考:
systemd: How to check scheduled time of a delayed shutdown? - Unix & Linux Stack Exchange 
shutdown - What commands show pending/scheduled tasks in Terminal? - Ask Ubuntu



[Windows]
設定300秒後關機
shutdown -s -t 300

清出自動關機設定
shutdown -a


參考:
Windows 7 使用指令讓它預約關機! @ 回憶......! :: 痞客邦 PIXNET ::