現象:VS2010 編譯生成安裝包,安裝後運行拋出 CLR20r3,異常類型 System.ArgumentOutOfRangeException,模塊 mscorlib。開發時調試正常,安裝後就崩。
代碼中若使用 Application.StartupPath、Directory.GetCurrentDirectory()、相對路徑 ..\\data\\ 等方式讀取配置/數據文件,安裝後工作目錄可能不是程序目錄(如以管理員運行、快捷方式啟動參數不同),導致找不到文件或路徑越界。
// 推薦:獲取當前執行程序集所在目錄(安裝後最可靠)
string baseDir = System.AppDomain.CurrentDomain.BaseDirectory;
// 或
string baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
// 組合數據文件路徑
string dataPath = Path.Combine(baseDir, "data", "config.xml");
Main() 入口添加全局異常捕獲,寫入詳細日誌:AppDomain.CurrentDomain.UnhandledException += (s, e) =>
{
File.WriteAllText("crash.log", e.ExceptionObject.ToString());
};
Application.ThreadException += (s, e) =>
{
File.WriteAllText("crash.log", e.Exception.ToString());
};
crash.log 定位具體代碼行BaseDirectory 拼接棄用 VS2010 內置 Setup Project(微軟已棄維),改用 WiX Toolset、Inno Setup 或 NSIS 製作專業安裝包,支持完整的路徑變量、權限提升、依賴檢查、回滾機制。