# 變更紀錄

**NSudo 6.2.1812.31**

- 添加法語翻譯（由 Thomas Dubreuil 貢獻）
- 使用 JSON for Modern C++ 替代 RapidJSON 以符合 C++17 規範
- 改善使用者介面體驗（感謝 Lenny）
- 修復上下文選單錯誤（感謝 Thomas Dubreuil 和 龍魂）
- 修復命令列解析器錯誤（感謝 wzzw）
- 添加繁體中文翻譯（由 羅宇凡 貢獻）

**NSudo 6.1.1811.18**

- 把 NSudoC 與 NSudoG 合併入 NSudo
- 為 ARM 和 ARM64 的 Release 二進位檔案編譯配置添加 VC-LTL 支援，並移除 VC-LTL
  4.0 之前版本的支援（大力感謝 mingkuang）
- 添加以下新的命令列選項
  - CurrentDirectory（由 testtest322 建議）
  - Help
  - H
  - Priority（由 testtest322 建議）
  - ShowWindowMode（由 testtest322 建議）
  - UseCurrentConsole
  - Version
  - Wait（由 testtest322、wzzw 和 Domagoj Smolčić 建議）
- 移除一些未文件化的命令列使用方式
- 改進數個實現
  - 重構命令列解析器
  - 引入新式建立處理序前端
  - 使用 ATL 實現主視窗
  - 修復上下文選單 Bug（感謝 Thomas Dubreuil）
- 更新授權的著作權所有者
- 移除文件中的捐贈連結

**NSudo 6.0.1804.5**

- 修復在 Windows Vista 和 Server 2008 下崩潰的問題（感謝 hydra79545）
- 與 M2-Team UWP 項目共享實現（詳情請閱讀
  「https://github.com/Project-Nagisa/Nagisa/blob/master/Changelog.md」）
- 移除無用實現
- 改進 NSudoStartService 函數的實現
- 使用 RapidJSON 替代 JSON for Modern C++ 以減小二進位檔案大小

**NSudo 6.0.1802.2 v2**

- 修復點選執行按鈕只彈出命令提示字元的問題。（感謝 AeonX）

**NSudo 6.0.1802.2**

- 修復多個 Bug 和改善多個實現
- 增加兩個獨立的可執行檔案用於不同情況
  - NSudoC.exe
    - 純命令列版本，子系統設置為「控制台」
    - 在控制台下執行良好，但是在非控制台處理序調用會出現黑色控制台視窗
    - 為了保證最佳體驗，NSudoC 不支援上下文選單
  - NSudoG.exe
    - 純命令列版本，子系統設置為「Windows」
    - 可以靜默執行，沒有黑色控制台視窗
- NSudo 將通過 M2MessageDialog 而不是 TaskDialog 顯示資訊
  - 理由
    - 因為可以使用縱向滾動條，NSudo 可以在出錯時提供更加詳細的內容
    - 你可以複製對話方塊里的內容
    - 支援 Windows 講述人，於是可以使用 CapsLock+H 讓講述人讀取對話方塊內容
    - 比 TaskDialog 的字型更大
  - M2MessageDialog 特性
    - 在 Windows 10 Build 10240 或之後版本完全支援 Per-Monitor DPI Aware
    - 完全支援 Windows 朗讀程式
    - 你可以使用縱向滾動條並且可以複製裡面的內容
    - 比 TaskDialog 的字型更大
    - 你可以按 Enter 鍵關閉對話方塊
  - 如果你想在你的項目使用 M2MessageDialog，請從此處下載以下檔案：
    https://github.com/M2Team/NSudo/tree/master/NSudoSDK
    - M2DPIScaling.cpp
    - M2DPIScaling.h
    - M2MessageDialog.cpp
    - M2MessageDialog.h
    - M2MessageDialogResource.h
    - M2MessageDialogResource.rc
- 移除繁體中文和日語的翻譯，因為翻譯內容已經過時而且我不懂怎麼用
- 升級 JSON for Modern C++ 到 3.0.1
- 右鍵選單
  - 增加多語言描述
  - 為所有項目添加「開啓全部特權」選項
- 更新命令列幫助和文件

**NSudo 6.0.1801.19**

- 修復 NSudoDuplicateSessionToken 函數定義 Bug（感謝 mingkuang）
- 修復在圖形介面下無法啓用全部特權的 Bug（感謝 abbodi1406）
- 修復沒有 VC-LTL 時 x86 和 x86-64(AMD64)的 Release 編譯配置未採用靜態編譯的 Bug

**NSudo 5.3.1801.11**

- 修復獲取 System 令牌函數的一個潛在 Bug（感謝 mingkuang）
- 對 x86 和 x86-64(AMD64)的 Release 編譯配置提供 VC-LTL 庫支援（感謝 mingkuang）
  - PS：把 NSudo 和 VC-LTL 一起使用可以減小 NSudo 二進位檔案的體積
- 整理文件

**NSudo 5.2 (5.2.1709.8 - 5.2.1710.26)**

- 整理程式碼，修復若干 Bugs
- 更新文件，增加英文自述
- 添加對 ARM 和 ARM64 平台的支援（感謝 fcharlie）
- 優化命令列解析
- 添加右鍵選單支援
  - 使用 /Install 或 -Install 參數添加右鍵選單（命令列參數大小寫不敏感）
  - 使用 /Uninstall 或 -Uninstall 參數移除右鍵選單（命令列參數大小寫不敏感）

**NSudo 5.1 (5.0.1708.9 - 5.1.1708.19)**

- 修復批次檔案調用 NSudo 後批次變量不生效的問題（感謝 羋員外）
- 令 NSudo 在帶有命令列的狀態下也能自動請求管理員權限（感謝 鳶一雨音）
- 更換新圖示，順便解決在 Windows Vista 之前版本系統上不顯示 NSudo 圖示的問題
  （PS：NSudo 最低要求依舊是 Windows Vista）
- 改進命令列解析（感謝 鳶一雨音）
- 更新原始程式碼授權的著作權（對說辭進行了優化）和更新感謝名單（新增人士）

**NSudo 5.0 (4.4.1705.28 - 5.0.1707.31)**

- 使用新的獲取會話 ID 方法解決在 Server 系統的遠程桌面會話上使用 NSudo 執行應用可能無
  法顯示介面的問題（感謝 sebus）
- 更新文件和授權協議以符合實際情況
- 移除 VC-LTL（由 fcharlie 建議），理由如下：
  - 雖然二進位檔案大小增加 80KB，但原始程式碼大小縮小 57.6MB
  - 原始程式碼大小縮小後，NSudo 的雲編譯速度大幅提升
  - 可以少屏蔽大量編譯警告
- 使用 NSudoSDK 項目代替 M2-SDK 項目
- 改進版本定義頭檔案
- 編譯器啓用 SDL 檢查、調整編譯輸出目錄和更新 CI 編譯配置檔案
- 調整並優化程式碼(感謝 fcharlie 的建議)
- .gitignore 檔案更新(由 fcharlie 實現)
- 完全使用 MSDN 文件化 API 實現 NSudoAPI.h 以方便人們調用
- 與 Nagisa 項目共用 m2base.h
- 整理屏蔽的警告，該版本 NSudo 屏蔽了以下警告實現 /W4 /WX 編譯
  - C4505 未引用的本地函數已移除(等級 4)
- NSudo 快捷列表檔案格式從 ini 遷移到 json 並更新列表內容
- 處理序建立時添加環境塊以改善兼容性
- 把 Windows XP 控件支援聲明和 Per-Monitor DPI Aware V1 支援移入清單檔案
- 在清單檔案添加兼容性 GUID 定義和 Per-Monitor DPI Aware V2 支援
- 修復當未在瀏覽視窗選擇檔案的情況下命令列文本框出現""的問題

**NSudo 4.4.1705.19**

- 適配最新版 M2-SDK
- 適配最新版 VC-LTL
- 修改編譯選項
- 使用 git 子模組機制（由 myfreeer 實現）
- 配置 AppVeyor（由 myfreeer 提供靈感）
- 開始使用 AppVeyor 自動編譯
- 更新 M2-SDK 和 VC-LTL 子模組
- 命令列解析從 main 函數拆分
- 修復升級 VC-LTL 後出現的編譯警告（有空會 pull fix 到 VC-LTL）
- 版本號重新由自己而不是 CI 編譯服務控制
- 整理解決方案佈局

**NSudo 4.3.1703.25**

- 32 位版本取消對 SSE 和 SSE2 指令集的依賴（為了保證完美的兼容性）
- 移除 NTIShell, NSudo.AppContainer, MiniFM 子項目
- NSudoSDK 完全被 M2-SDK 和 M2.NSudo.h 替代
- 關於介面佈局調整
- 子系統設置調整為 Windows 子系統（為了不再彈出黑框）
- 優化程式碼，減少全局變量
- System 令牌副本建立函數移除會話 ID 參數（因為現實情況只能使用當前會話 ID）
- 使用舊版應用調用方式（即使用 cmd，解決無法調用帶參數應用的問題）
- 優化在 UI 自動化工具（例如講述人等讀屏軟件）上的使用體驗
- 「執行」按鈕被設為默認按鈕以提升使用體驗
- 優化多語言資源以減小體積
- 修復 UI 標題欄沒有圖示的問題
- 為 UI 增加最小化按鈕
- 修複數個庫函數返回值 Bug
- 修複數個命令列解析 Bug
- 修復 UI 圖示的 DPI 縮放問題
- 開始使用 Visual Studio 2017 編譯
- 移除 NSudo-GUI 項目
- 程式碼不再包含 M2-SDK 和 VC-LTL 的內容，需要單獨從 github 克隆

**NSudo 4.2**

- 引入新 NSudoSDK API 並且對已有 NSudoSDK API 進行改善
- 優化程式碼，以減少 Windows API 調用次數
- 修復不帶任何參數情況下可能的奔潰問題
- 修復控制台部分不能在非管理員權限顯示命令列幫助的問題
- 基於 ShellExecute 自建調用宿主，以去除對 cmd.exe 的依賴
- 引入 NTIShell（相當於 NSudo 1.0）重製版，作為 NSudoSDK 的一個示例
- 更改 MiniFM 圖示

**NSudo 4.1**

- 修復命令列使用-U:D 導致程序奔潰的問題
- 更正命令列的 NSudoC 殘餘描述（感謝 NotePad）
- 支援檔案拖拽（感謝 NotePad）

**NSudo 4.0**

- 重寫程式碼，提供 NSudoSDK，使程式碼容易使用在其他項目上
- 命令列下新增"/"前綴參數支援,例如: NSudo /U:T /P:E cmd (感謝 th1r5bvn23)
- 支援默認參數，即以 TrustedInstaller 令牌且開啓全部特權執行 (感謝 老九)
- 在默認快捷命令列表加入 host 編輯
- 增加 NSudo 和 MiniFM 的 Per-Monitor DPI Aware 支援
- 採用 VC-LTL 大幅度減小程序體積（感謝 mingkuang）
- 更改圖示（感謝 20011010wo）
- 精簡並優化主介面（感謝 kCaRhC 卡殼，さくら）
- 使用 TaskDialog 替代 MessageBox
- 對關於介面進行調整，並在關於介面加入命令列幫助
- 修復彈出檔案不存在的問題
- 修復命令列解析的一個潛在 Bug
- 緩解 NSudo 圖形介面的空格問題（瀏覽功能自動給命令列加引號）
- 消除在編譯時的警告(/Wall 和/WX 兩個參數同時使用)

**NSudo 2016.1**

- 修復 TrustedInstaller 下執行程序介面不顯示問題（感謝 abbodi1406）
- 修復命令列解析的漏洞和 UI 錯誤（感謝 imadlatch）
- 整理程式碼，提升可讀性
- 當前目錄設為 NSudo 所在目錄（未來會更加靈活）
- ShortCut 實現無限項目
- 新增簡易檔案管理器小工具（感謝 20011010wo）

**NSudo 2016**

- 支援多語言（程序內含簡中，繁中，英文，日文）
- 命令列處理重寫
- 實現程式碼全部重構；效率更高

**NSudo 3.2 Fix1**

- 優化程序邏輯；減少無用程式碼
- 命令列版和圖形版二合一

**NSudo 3.2**

- 修復無法使用帶有空格的路徑的問題
- NSudo 和 NSudoC 單檔案化
- 增加 NSudo.bat 方便新手準確調用與電腦架構相符的 NSudo 版本
- NSudoSDK 增加靜態庫（用 NSudo SDK 開發的工具可以實現單檔案）
- 編譯平台採用 Visual Studio 2015 + Windows 10 SDK

**NSudo 3.1 Debug**

- 修復 UI 的 ComboBox 不能輸入太長文字的問題
- 修復某些情況下不能使用的問題（由於開發機 Windows10 的 Bug 而導致誤認為那種方式可
  行）
- 增加真正的令牌降權（除了 cmd 會誤顯示管理員外；其他的會將其看作普通用戶）
- 增加命令列版本
- 增加常用列表自定義功能

**NSudo 3.0 R2**

- 修復不能打開其他被系統關聯檔案的 Bug
- SDK 的頭檔案改進：增加#pragma comment(lib,"NSudoAPI.lib")

**NSudo 3.0**

- 支援外部應用調用（很抱歉讓一些人等太久）
- 增加了常用調用列表（暫時不支援自定義；未來 3.1 會加入）
- 加入了降權功能（當然，是完美降權到 UAC 未提權前。當然原理不是用獲取 explorer 令牌
  和建立計劃任務）
- 支援對權限令牌的自定義
- 介面的完全重構（相對於 2.x 來說）
- 程式碼優化（相對於 NSudo 3.0 M1 來說）
- 加入 NSudo SDK
- 原生 64 位版本
- 實現了調用外部程序無視 WOW64 重定向的方法（NSudoCreateProcess）
- WinPE 支援（雖然沒起多大作用）

**NSudo 2.1**

- 實現自動開啓所有權限 Token
- 對 cmd 的調用使用絕對路徑，估計可以避免一些不必要的 Bug
- 優化原始程式碼

**NSudo 2.0**

- 程式碼全部使用 C++ Win32 SDK 重寫（程序從 692KB 縮小到 92KB）
- 提供獲取權限的選項
- 提供命令列參數模式
- 更換了圖示

**NSudo 1.2**

- 未公開發佈（估計還是在修復 SessionID 問題）

**NSudo 1.1**

- 修復 SessionID 問題
- 32 位和 64 位版本合體（根據架構確定執行那個架構的命令提示字元，採用 SysNative 目錄
  （64 位 Vista 開始有的重定向）調用 64 位 cmd）

**NTIShell 1.0**

- 根據 raymai97 的超級命令提示字元製作的第一個版本
