91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

都是manifest惹的禍

發布時間:2020-06-22 09:11:08 來源:網絡 閱讀:251 作者:alexanda2000 欄目:開發技術

開發的程序有一個導出功能,導出前會有一個簡單的選擇目錄的步驟。簡單啊,簡個對話框,點確定不就完事了?沒想到的是,這個“簡單”的動作整整耗了我一天的時間。

最初出現的問題是,在win10上,有一些目錄是被嚴格控制寫入的,比如C:\,用戶選擇了這樣的目錄之后,導出就會報錯。這也簡單啊,用戶選擇目錄之后,對這個目錄做一個簡單的測試,寫一個空白文件進去,寫成功了就說明這個目錄可用,寫入失敗就說明這個目錄沒有權限寫入唄,區區三五行代碼,so easy...

類似的代碼如下:

var

sl:TStringList;

begin

sl:=TStringList.Create;

try

sl.SaveToFile('C:\datatest.txt');

except

(說明沒權限,重新讓用戶再選一個目錄)

end;

sl.Free;

end;

意想不到的問題來了,用戶選擇了C盤根目錄這樣注定會寫入失敗的路徑時,這段代碼運行的結果竟然說寫入是成功的!但是對應的目錄上實際上是沒有這個文件的,太詭異了。在SaveToFie之后用FileExists函數來檢測,也是說磁盤上已經有這個文件了,寫入成功。以為自己眼花,打開文件瀏覽器再核對一次,的的確確是沒有這文件,我。。。。

接下來各種調整(此處省略掉一萬字。。。),比如說生怕寫入動作一定要釋放變量后才真正執行,就在寫入后趕緊將TStringlist給free掉,或者改成了用函數對TextFile的文件操作,強制刷入磁盤,結果無一例外,還是和之前一樣。

不信邪于是新建了一個工程來試,結果跌大眼鏡,這段代碼在新工程里可以正確無誤的執行。看來問題出現在工程設置上,因為我這個工程是從舊版本升級來的,估計有一些設置沒有配上。對工具仔細比對了兩個dproj文件,在差異處沒看出什么道道來,又在菜單project——option里面看,也是一無所獲。準備關掉option對話框的時候,隨手把manifest的設置點了一下,原來是none,改成了auto generate。關掉了再運行,居然正確了,瞎貓竟然碰到了死老鼠!

查了一下manifest的作用,原來Application manifest相當于程序的配置和說明,在XP的時候提出,在Vista的時候做了改進。估計我之前的程序從老版本Delphi升級過來,manifest部分沒有設置,所以win10將程序作為老式程序,在兼容模式下運行了,老程序是可以寫入C盤根目錄的,當然是假的寫入,只在本進程內可見。當我檢測到可以寫入,但真正調用Excel來導出的時候就報錯了。當我生成manifest,運行在真實模式的時候,終于得出了真正的結果。而那個新工程因為是新版本Delphi建立的,默認就設置了manifest,所以運行一切正常。

挖掘到了manifest這個寶藏,還順便解決了困擾我的一些問題。比如說,在里面勾選允許run time themes,工具欄上面的圖標顯示也正常了,不會在顯示在偏上的位置。DPI(manifest自動生成之后,這一項也會自動選上)選擇系統識別或者顯示器識別,原來在高分辨率下顯示模糊的程序也清晰了,perfect!

下面是一篇有關windows程序manifest說明的文章:

http://www.softwareace.cn/?p=1207

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北海市| 丰都县| 巴塘县| 临海市| 达日县| 邮箱| 邹城市| 凤阳县| 余干县| 信宜市| 文山县| 吴川市| 常山县| 江华| 阿勒泰市| 会泽县| 汤原县| 库尔勒市| 开封县| 昭苏县| 应城市| 苗栗县| 舞阳县| 华阴市| 舟山市| 岑溪市| 九龙坡区| 石家庄市| 高要市| 汕尾市| 遵义县| 曲松县| 乐业县| 随州市| 石首市| 仁化县| 天等县| 诸暨市| 丹东市| 贡嘎县| 佛山市|