2018/12/23

無法啟用教育版的office怎麼辦


工作上常常遇到,學生的電腦無法正確啟用學校下載的Office軟體。
有這樣的情形,通常是學生購買的筆電已經安裝過Office365或是筆電附贈的Office精簡版。
必須要徹底把這些原有Office移除,才能安裝校園版的Office。
不過光從控制台刪除再重開機,還是會移不乾淨。

請連至以下微軟的官方頁面(連結可能無法直接點選,請複製至瀏覽器的網址列):


查看 選項 2 - 使用簡易修正程式工具完全解除安裝 Office 2016。
請點選畫面中的 簡易修正按鈕 將 Office 解除安裝。
確定移除且重新開機後,再安裝前次下載至您筆電中的Office。

軟體啟用作業需在校內進行,或透過學校的VPN連線認證後,再從校外執行。

2018/10/18

提升前端安全性 檢查表

1.加上安全的header
https://devco.re/blog/2014/03/10/security-issues-of-http-headers-1/

2.頁面端傳遞變數時,將其編碼,以免有些參數跑掉了
透過javascript傳遞值,要再加上 encodeURIComponent() 做urlEncode
若使用  encodeURI()  
  • 不編碼符號包括: ~!@#$&*()=:/,;?+'
(轉引自 https://blog.longwin.com.tw/2010/01/javascript-encodeuri-component-utf-8-2010/)

3.不要相信前端傳遞的資料。關鍵的代碼需要在後端編碼過,再傳到前端。

2018/10/11

Entity framework 攻略

有多重排序的需求,該怎麼作?

.OrderBy(x => new { x.PROGRAM_CODE, x.LITERACY_CODE }).ToList();

提升寫入速度

利用foreach新增多筆資料或刪除多筆資料時,將多筆資料塞到一個 list中,再利用RemoveRange()方法處理。同時不要每一筆紀錄就執行一次 savechange()。

也有人建議將偵測異動屬性關閉,但這樣會抓不到savechange筆數
dbContext.Configuration.AutoDetectChangesEnabled = false;

要追求極致效能,使用手寫sql等技巧,有以下的討論:
https://www.thereformedprogrammer.net/entity-framework-core-performance-tuning-a-worked-example/


Entity framework 要如何 left join?

(LINQ LEFT JOIN where clause)

此處的情境假設有個db實體為XEntities,主要表格為PROGRAMs,join SCHOOLs、PROGRAM_TYPE兩個表格。要找出 PLAN_FILL_RECORD 有沒有填寫紀錄。

因為 PLAN_FILL_RECORD 要指定只抓某年度的紀錄,因此年度的條件是放在 join 該行的 where 敘述中。若放在 on 的敘述,會變成 inner join。
此外,PLAN_FILL_RECORD 不一定有值,所以在on 之後會讓查詢結果加上一個 into 敘述(黃色部分),將以上的查詢結果帶到 pRes  之中。
接下來再用 from .... in  pRes.DefaultIfEmpty() 的語法查詢結果,這樣有結果則顯示資料,沒結果則帶出 left join資料表的欄位預設值。
最後用欄位投影方式,處理欄位有null時如何顯示。這裡為了讓資料維持強型別,定義了一個 OBJECT_SHOW物件來接收資料。

var query2 = (
from b in XEntities.PROGRAMs
join e in XEntities.SCHOOLs
    on b.SCHOOL_NO equals e.SCHOOL_NO
join p in XEntities.PROGRAM_TYPE
    on b.PROGRAM_TYPE equals p.PROGRAM_CODE
join plan in XEntities.PLAN_FILL_RECORD.Where(o => o.STANDARD_YEAR == cyear)
    on b.PROGRAM_ID equals plan.PROGRAM_ID into pRes

from res in pRes.DefaultIfEmpty()
select new OBJECT_SHOW()
{
    SCHOOL_NO = b.SCHOOL_NO,
    //..................
    PROOF2 = res == null ? "" : res.PROOF2,
    REPLY_DOCU_NO = res == null ? "" : res.REPLY_DOCU_NO
})
.ToList();

[參考1]

Entity framework 要如何撰寫像sql 一樣的where colunm in ('a','b','c')?


  List<string> optionList = new List<string>();
            optionList.Add("IN03");
            optionList.Add("IN19");

          using(Entities db = new Entities()){
              var Query1 = from a in db.ISSUEs
                           where (optionList.Contains(a.ISSUE_CODE.ToString()))
                           select a;

              foreach (ISSUE vi in Query1)
              {

                  Response.Write(vi.ISSUE_NAME +"<br/>");
           
              }
       
          }

 Entity framework 刪除失敗

使用EF異動資料 ,在更新之前 根据外键 我查询了 是否已经存在:
dbContext.model.Where(d => d.HotelId == hotelId).FirstOrDefault();
如果 存在 就更新, 不存在就Add;
存在 时 去 更新:
dbContext.Entry(model).State = EntityState.Modified;
dbContext.SaveChanges()
此时运行就会报错: Store update, insert, or delete statement affected an unexpected number of rows (0)

解决办法:
 dbContext.model.Where(d => d.HotelId == hotelId).FirstOrDefault();
 dbContext.Entry(mod).State = EntityState.Detached;    // 查询完后 dbContext实体 内 已经存在了, 要设置为 detach ,然后再去更新
dbContext.Entry(model).State = EntityState.Modified;
dbContext.SaveChanges()




抓取 Entity framework 寫入時的Exception


 try
                {
                    CEntities.CURSE_QA.Add(QA);
                    CEntities.SaveChanges();
                }
                //將錯誤訊息顯示在頁面上
                catch (System.Data.Entity.Validation.DbEntityValidationException Dx) {

                    string DbErrorList = "";
                    var qq = Dx.EntityValidationErrors;
                    foreach (var thisError in qq) {
                        foreach (var thisSubError in thisError.ValidationErrors)
                        {
                            DbErrorList = DbErrorList + thisSubError.ErrorMessage;
                        }
                    }
                    Literal1.Text = DbErrorList;
                }
                catch (Exception ex)
                {
                     
                    throw ex;
                }


2018/10/3

C# 入門語法整理(字串函數)


常用字串函數

用途
回傳
.Tostring()
其他型別轉字串
字串
char sp = ‘,’;
string someStr=”joe,alisa,tesla”;
string[] array1 =someStr.split(sp)
把字串分割成陣列
字串陣列
.Trim()
清字串末尾的空白
字串
(“where a={0}”, str1)
字串格式化
字串
.replace(“目標字元”,”取代後字元”)
取代某個字串
字串
string.Contains("goodbye")
確認是否包含某個字元
bool
string.IndexOf(“清華”, 0)
查出某字串自第幾個字元起是否包含要查詢的詞彙
Int,表示所在位置,
不存在時,回傳-1
string.Compare("字串", "測試"); // result = -1 
string.Compare("字串測試", "字串測試"); // result = 0 
比對兩個字串是否完全相符
不同=-1
相同=0

.ToUpper()
轉大寫
字串
.ToLower()
轉小寫
字串
.Substring(1, 2)
擷取某部分字串
字串

轉型別(型別寫在前面)
(int32)obj

求餘數
%
Stringbuilder 類別
用於大量的字串串接,提高效能
Stringbuilder sb = new stringbuilder();
Sb.append(“xxxxxxxx”);

條件 (三元) 運算子
Stirng vColor = ( thisClass=”金牌會員”)? “gold”: “gray”;

HTMLENCODE
System.Net.WebUtility.HtmlDecode(texts);


2018/9/2

手刻 JQuery,Linq to SQL,AJAX , C# 做修改與刪除(Part1)

寫程式使用Ajax已經是十年前ASP的事,當時沒有其他框架輔助,傳輸資料走的是XML,組合資料相當不方便。以現在而言,不論前端或後端,將DB資料組成JSON傳遞與解析都已經非常方便了。以下的專案用一個ASP.NET WebForm當例子,實作Ajax顯示與更新資料。

WebForm常常被看作懶人程式,因為技術門檻低、拖拉控制項就會有結果。可是ASP.NET本身的ViewState以及操作往返暗地傳輸的資料,當畫面複雜時,速度就會變得笨重,許多顯示事件都放在後製程式碼中也不好閱讀。雖說 Asp.NET MVC更直接改善了責任分離與可維護性,但針對既有的Web Form專案,還是值得去改善她。

步驟一:資料來源
在專案引入Entity framework,選擇從資料庫更新模型。雖說網路上有許多大神推薦Linq to SQL,但以個人建議,除非自己是DBA而且對物件的命名、架構、關聯都有高度掌握,不然後續架構的變化,會讓模型突然跑出一堆編譯錯誤。Entity framework本來就只是個協助將資料庫物件反過來「物件化」的捷徑,若是資料非常龐大或結構複雜,應該好好想一下才對。

例如有一個資料表叫SCHOOL,裏頭有全台所有大專院校的資料,每校一筆且有索引鍵;這種形式的資料透過Linq to SQL存取就變得十分容易。我們用一隻泛型處理函式(.ashx)來顯示Linq從db抓出的資料,然後以JSON回傳給呼叫的前端。實務上還要考慮:回傳筆數是否加個上限,以免DB被操爆了,然後是否要限制這隻泛型處理函式適合被哪幾隻呼叫?需要在有登入的前提下才能呼叫他。

首先,因為考慮要判斷呼叫者的Session,所以.ashx的開端要加上繼承SessionState。

 public class GetOperator : IHttpHandler, System.Web.SessionState.IRequiresSessionState

然後,假設我們用學校代碼判斷回傳該校的人員,所以人員代碼要做點格式判斷。
在Ashx內讀取 Request,應該加上 context.Request。

 string shno = context.Request.Form["SCHOOL"];
            if (shno == null || shno == "" || shno.Length != 4) {
                context.Response.StatusCode = 404;
            }

接下來換 Linq to SQL 出場,用大括弧包住。
留意當中是用var 宣告一個泛型變數,在where的地方寫入篩選條件。
Linq 會將這種 Lambda語法轉譯成 SQL command,然後將回傳結果依照
Entity Framework的既有結構,轉成可列舉的物件,再選擇轉為List回傳。

可是有時候我們不想要Linq回傳所有欄位,
又或者有個欄位是需要處理過才能回傳的(如hash值),
像在SQL裡那樣直接Select as 成新欄位,或是做字串操作,可是常常會踢到鐵板。
因為Lambda有責任把動作轉譯給SQL,直接下在Lambda裡,會受到轉譯器看不懂的諸多限制,或是轉譯器認為SQL裡沒辦法這樣做,然後噴出錯誤。
以筆者的解決方法,會刻一個新的物件類別 SCHOOL_TO_SHOW,
告訴Lambda語法,將選定的欄位值抄到這個SCHOOL_TO_SHOW物件內,
回傳的是這個SCHOOL_TO_SHOW的集合,再轉成List,這樣後續的操作才不會報錯。

using (MyDbEntities Context= new MyDbEntities())
            {
var qq= Context.SCHOOL_OPERATOR.Where(o => o.SCHOOL_NO == shno).
                    Select(c => new SCHOOL_TO_SHOW
                        USER_ID =c.USER_ID,
                        USER_NAME = c.USER_NAME,
                        SCHOOL_NO = c.SCHOOL_NO,
                        ....
                    }).ToList();
}
SCHOOL_TO_SHOW的集合,欄位都是自己刻的,就不受到原來物件模型的限制,
可以透過 foreach 逐筆走訪去調整成自己要的樣子,最後透過JsonConvert.SerializeObject()的方法轉到前端,變成JSON字串。

                foreach (SCHOOL_TO_SHOW sw in qq) {
                    sw.USER_ID = sw.USER_ID.Trim();
                    sw.USER_ID_ENC = de.Encode(sw.USER_ID.Trim());             
                }
               string vq=  JsonConvert.SerializeObject(qq);
               context.Response.Write(vq);

接下來,就可以在VS裡的中斷點,看到要回傳到前端JSON的具體內容及欄位了。


步驟二 資料讀取
接下來我們用ajax 來讀取剛剛寫好的泛型處理函式。請留意範例程式碼內的url 要寫真正.ashx發布後的路徑 不然找不到資料就頭大了。
data:{ } 裡面是要post給 ashx的索引資料,告訴他要取那些資料回傳。
dataType: "json",  表示預計要回傳的是json資料。
這個範例有使用asp.net的 master page,所以所有控制項的名字在輸出時會被改名,
用JS存取時要特別留意。
success: 是順利取得資料後要做的事。在範例中,是針對一個空的表格,變成一列列的表格列,append到當中顯示。
這裡用到 data-toggle 的標記去觸動bootstrap 的modal語法,顯示交談框;另外加上onclick事件,以決定點擊按鈕後的行為。class設定為 btn。

   function readData() {
        $.ajax({
            url: "../WebComponent/Balabala.ashx",
            type: "POST",
            data: {
                SCHOOL: $('#ContentPlaceHolder1_DropdownList1').val(),
                HVERIFICATION: $('#ContentPlaceHolder1_HV').val()
            },
            dataType: "json",
            success: function (response) {
                $('#tb1 tbody').empty();
                $.each(response, function (index, element) {
               
                     $('#tb1 tbody').append(
                             $('<tr>'),
                             $('<td>' + element.USER_NAME + '</td>'),
                             $('<td>', { text: element.USER_ID }, '</td>'),
                             $('<td>', { text: element.DEPARTMENT }, '</td>'),
                             $('<td><input type=\"button\" class=\"btn btn-info\" value=\"修改\" data-toggle=\"modal\" data-target=\"#exampleModal\" onclick=\"fnUpd(\''+element.USER_ID_ENC+'\');\" ></td>'),
                             $('</tr>')
                             ) ;  
                });
            
            },
            error: function () {
                alert("LOAD ERROR!!!");
            }
        });
    
    }

2018/5/18

Excel的大魔王:不可視字元(NO-BREAK SPACE, )



公司有許多同事Excel功力已臻化境,Vookup、樞紐分析等功能非常上手。但有時會遇到一個棘手的問題,某些客戶編號(學號)會對不到,或是排序時,明明同屬於一組單位代碼109的資料,卻被排序到不同的位置去。


一般而言,這是因為要拿來比對的兩個欄位之間 (1)資料型態不同 (2)比對的字串末尾夾雜著不可視字元。型態不同的問題,可以利用Excel的「資料剖析」將欄位裡的資料整欄選取,使其變成真正的數字或文字(光改儲存格格式是沒有用的)。但如果資料來自於網站複製貼上的文字,在每個欄位末尾可能藏著設計師放進去、美化表格的字元,肉眼保證看不到,這就超悲哀了。


通常可用的方法有: 1.用len()函數查一下字串的長度,例如儲存格 A1的值是109, len(A1)卻看到長度是4;不得了,後面有鬼。


2.如果已知資料長度固定,那麼資料剖析時選固定寬度,可以像切西瓜一樣從你要的長度位置切下去,後面的就不要了。


3.如果長度不固定而且數字文字混雜,,可以先用 clean()、trim()等函數清一次;如果不能奏效,只能用SUBSTITUTE這個函數將不要的可疑字元濾除。


以這次的案例而言,本來以為是夾雜空白字元,乾脆發狠利用Excel內的char()函數,從1-255組出ASCII全部的字元做比對。結果還是找不到(崩潰)?


後來想想,這個已知的不可見字元在字串末尾,用right(xx,1)可以找出來他的本尊,再用code()函數可以找出他的字碼。得出的結果是char(63),是個問號? 這個答案是錯的。最後看一下Excel還有個函數就叫unicode,可以依照字元查編碼,得出這個搗蛋鬼的真正樣貌是 UNICHAR(160),學名是不換行空格(NO-BREAK SPACE),人果然是他殺的。要取她的字元,則要用 UNICHAR(160)。


https://zh.wikipedia.org/wiki/%E4%B8%8D%E6%8D%A2%E8%A1%8C%E7%A9%BA%E6%A0%BC


由此,網路上流傳的特殊字元清除名單,在Excel中處理時應該略作調整。


Char(1),空字符NULL

Char(9),tab

Char(10),換行

Char(13),Enter

Char(32),空格

Char(160) 找不到的話 => unichar(160)


最後用 SUBSTITUTE(C4,UNICHAR(160),"") 將其取代,終於打完收工。

2018/3/2

中文難字與 Html Entities (C#)

工作的環境中會遇到新舊系統交雜以及中文內碼轉換問題。
某系統為Big5編碼,用 Html Entities 儲存但超出Big5編碼範圍的unicode字元,存在資料庫內像是:

&#20227;

瀏覽器顯示出來,會是人字旁的 伃 。

我的工作得把在另一套舊系統內,用非Unicode造字的姓名找出來。當初公司本來採用另一套造字管理程式。由於這些字的內碼沒有規則,對電腦而言跟天書沒兩樣,只能利用windows的輸入法整合器手寫,找到跟unicode內一致或相近的字體,丟到網路上查出Html Entity,再回存到資料庫。

現在機器學習成為顯學,本來想過要寫套圖形辨識來比對特徵,把舊有難字轉成圖片,找出unicode的字。後來發現實際執行上人工搜尋雖然笨,但已能滿足需求,只好把自動辨識的 side project 先擱在一邊了。

另外,必須找一部xp跟一部win7以上電腦做比較,確認big5的欄位有沒有字是混到unicode?要確認未來舊的難字系統關閉後,能不能忠實呈現難字。

一定有同行質疑,新系統的值幹嘛不直接存unicode?主要還是要考慮其他人用舊系統回溯查詢的問題。新的系統帶unicode,舊系統帶存有 html entity的值的欄位。這是又大又複雜的系統,所不得不做的考量。

由unicode的字查Html Entity,可以用轉換的;少量可以單筆試手氣,如:

http://jicheng.tw/hanzi/search.php

Html Entity 的大全集可再下面找到:

http://jdawiseman.com/papers/trivia/character-entities-lots.html

此外,在網頁顯示時,瀏覽器會自動轉換成unicode顯示,但在匯轉成excel或csv時,帶出這樣的值會被當成亂碼。在C# 中,必須將其加以處理,但要注意的是,考慮專案跨平台的可能性,不要呼叫 HttpUtility.HtmlDecode

而是使用 System.Net.WebUtility.HtmlDecode(texts);

可以得到相同結果,但有比較大的彈性。

參考出處:
https://stackoverflow.com/questions/13492497/converting-html-entities-to-unicode-characters-in-c-sharp

2018/2/18

小資族理財:重讀「有錢21招:寫給低薪族的理財觀念魔法書」

小資族理財:重讀「有錢21招:寫給低薪族的理財觀念魔法書」



《有錢21招:寫給低薪族的理財觀念魔法書》(財信出版,2010)是本出版很久的老書,在網路上可以找到許多內容摘錄與評論。但筆者覺得本書歷久彌新而且富有歷史意義。

首先,2008次貸風暴引發全球不景氣,許多高收益組合變成泡影。此時這本書強調的:理財不是要變有錢,而是不要變窮,就顯得十分受用。其次,這本書是針對手頭資源不多的人的入門建議。想要獲得具體理財操作步驟的人,難免會有點失望,因為這本書不是要教你殺進殺出。也許更適合有一點點理財經驗但無法跳出窮忙困境的人閱讀。

本書原來的例子很多取自美國,因此以下的心得是以個人的經驗以及本土的例子重新改寫過。

一、理債
  1. 算清楚手頭有那些錢有義務要付給別人。避免「感覺有錢、真貧窮」。
  2. 不要被欠款利息拖垮。
  3. 超出負擔能力的借貸,在市場低迷時會加劇損失
    (ex1:借房貸買股或買債券、卡債以債養債)
    (ex2:極端例子,如次貸風暴時部分民眾寧可棄屋不繳,因為房子貶值到低於市值,根本不值錢,還要付利息出去)。

二、節用
  1. 物質慾望少一點,用精心規劃的旅遊、家庭聚會....等生活上的愉悅體驗代替物質享受
  2. 付得起的錢不要靠保險,保險只用來轉嫁不可承受的風險
    (只要存款夠多,很多錢你都負擔的起。保費付出去你手頭的可支配現金就少了。
    保險只用於轉嫁不可承受的風險(身故/全殘)。如果沒有扶養親屬[尊長或子女],壽險可能不需要)
    ※可參考劉鳳和先生的平民保險王
  3. 從源頭減少固定支出(個人註解:汽車、房屋等看似基本配備的物件,都須長期付出維護費,且需每年折舊)
  4. 手頭緊的話,要狠下心別考慮買房子或留錢給小孩,先考慮老年生活跟退休金。
  • 小孩有無窮的機會,但是你活不好會拖累下一代(不要禍延子孫)
  • 越老存錢,越來不及
  • 小孩可以辦學貸,你老了可是無錢可貸
  • 要考慮到,你可能會活很久(不要禍延子孫,很重要)

三、賺錢是基本,存錢更重要
  1. 以台灣的例子,行有餘力的話多存勞退基金(雇主提薪資6%,個人可以自己選擇加扣薪資的6%),強迫儲蓄。還有最低保證收益與稅務減免。
    (很多人搞不清楚 勞工保險金 跟 勞工退休金 是兩筆錢,沒有留意雇主扣除額被高薪低報的問題)
  2. 年輕時多存錢,到30歲以後比較不辛苦(已累積一筆固定資金可投資、錢滾錢)。
  3. 有財力證明、盡量改善信用紀錄(少信貸、避免延繳信用卡)。未來跟銀行打交道比較容易。

四、投資
  1. 行有餘力的話→投資,但是分散風險(股票、債券、房子、基金)。
  2. 用自己的錢買股票(不小心套住了,不會因為利息壓力而賤賣股票,以免釀成毀滅性損失、賣在最低點)。
  3. 確定找到好股票時,即使遇到暴跌、下跌時也要撐住,選好再買。
  4. 如果沒空研究,趁著股市悲觀、慘跌、崩盤時買ETF指數型基金(如0050)。
  5. 賺到的錢必須再投入投資,才有比較顯著的複利效果,而且持有成本隨著時間拉長會逐漸降低。
  6. 若現金不多,不要想靠著買房子賺錢,因為你通常同時間只買得起一間,扣除賣屋、搬家、維護的成本,當包租公的收入沒有想像中高。

補充:

  • 投資沒有必勝策略,有時剛好是市場景氣好,讓投資人誤以為自己很會挑,這是後見之明的謬誤。人通常會漠視與自己立場對立的資訊。
  • 稟賦效應(endowment effect): 老王賣瓜,過度自誇=>人會自圓其說,且過度評價自己擁有財貨的價值 。
  • 當一項東西大家都買,在投資市場裡代表已經過熱了。


2018/2/14

IIS記事兩則:上傳空間限制(MaxRequestLength) 與 錯誤追蹤紀錄不完整(LOG-FILE-MAX-SIZE-TRUNCATE)

Windows Server 的IIS 有個陳年舊案:系統為了安全與效能考量,會限制上傳檔案的大小。從多年前的4MB大小,演變到在.net framework可自行調整設定。若設的太保守,user上傳檔案超過限制,系統會直接噴錯誤。這靠try-catch會攔不下來,得從該部主機的事件檢視器裡才能觀察的到。

要解決本問題,以Server 2012而言的步驟如下:

(1)首先要改 web.config內的 <system.web> 區段內的httpRuntime設定,在當中增加maxRequestLength屬性(請記得是將語法加到現有那一行內的內容,不是多複製一條貼上。這樣會造成網站不能運作)。
範例中8096的單位是KB。

<system.web>
<httpRuntime targetFramework="4.5" enableVersionHeader="false" maxRequestLength="8096" executionTimeout="300" />
..... 
</system.web>

(2)再者,
在IIS的要求篩選頁面的設定,點選右方藍色小字的 編輯功能設定。
允許的內容上限應比前述步驟一的httpRuntime略大一些。


另外,加上錯誤的處理程序會更好一些。讓Global.asax實作超出可容忍上傳大小的錯誤處理,避免噴出錯誤,而是重導到某個較友善的說明網頁。

protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpRuntimeSection section = WebConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
    if (section != null)
    {
        if (Request.ContentLength > (section.MaxRequestLength * 1024))
        {
            Response.Redirect("~/PostedQuotaExceed.aspx");
        }
    }
}

另外一個問題是,新版windows server上的iis 管理人員,多半已經利用錯誤追蹤(Failed Request Tracing) 來捕捉上線環境種種惱人的bug。但有時候很討厭,記錄大到還沒有顯示出錯程式的位置就已經結束,顯示LOG-FILE-MAX-SIZE-TRUNCATE。IIS Trace到紀錄單一檔案的大小上線時,就會停止繼續保留追蹤紀錄。

以前都認為有把功能打開就好,但其實沒有正確設定,這樣豈不等於有記跟沒記一樣?


為了避免記錄做半套,可以依照以下作法精進:
(1)以系統管理員身分啟動命令提示字元
(2)切換到 windows 目錄下的 system32\inetsev
C:\> cd %windir%\System32\inetsrv


appcmd set config /section:sites -siteDefaults.traceFailedRequestsLogging.maxLogFileSizeKB:1024

按下enter後 系統顯示:

已將設定變更套用至設定認可路徑 "MACHINE/WEBROOT/APPHOST" 中 "MACHINE/WEBROOT/APP
HOST" 的區段 "system.applicationHost/sites"。

這樣就大功告成了。