開(kāi)發(fā)的程序有一個(gè)導(dǎo)出功能,導(dǎo)出前會(huì)有一個(gè)簡(jiǎn)單的選擇目錄的步驟。簡(jiǎn)單啊,簡(jiǎn)個(gè)對(duì)話框,點(diǎn)確定不就完事了?沒(méi)想到的是,這個(gè)“簡(jiǎn)單”的動(dòng)作整整耗了我一天的時(shí)間。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到滄源網(wǎng)站設(shè)計(jì)與滄源網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋滄源地區(qū)。最初出現(xiàn)的問(wèn)題是,在win10上,有一些目錄是被嚴(yán)格控制寫入的,比如C:\,用戶選擇了這樣的目錄之后,導(dǎo)出就會(huì)報(bào)錯(cuò)。這也簡(jiǎn)單啊,用戶選擇目錄之后,對(duì)這個(gè)目錄做一個(gè)簡(jiǎn)單的測(cè)試,寫一個(gè)空白文件進(jìn)去,寫成功了就說(shuō)明這個(gè)目錄可用,寫入失敗就說(shuō)明這個(gè)目錄沒(méi)有權(quán)限寫入唄,區(qū)區(qū)三五行代碼,so easy...
類似的代碼如下:
var
sl:TStringList;
begin
sl:=TStringList.Create;
try
sl.SaveToFile('C:\datatest.txt');
except
(說(shuō)明沒(méi)權(quán)限,重新讓用戶再選一個(gè)目錄)
end;
sl.Free;
end;
意想不到的問(wèn)題來(lái)了,用戶選擇了C盤根目錄這樣注定會(huì)寫入失敗的路徑時(shí),這段代碼運(yùn)行的結(jié)果竟然說(shuō)寫入是成功的!但是對(duì)應(yīng)的目錄上實(shí)際上是沒(méi)有這個(gè)文件的,太詭異了。在SaveToFie之后用FileExists函數(shù)來(lái)檢測(cè),也是說(shuō)磁盤上已經(jīng)有這個(gè)文件了,寫入成功。以為自己眼花,打開(kāi)文件瀏覽器再核對(duì)一次,的的確確是沒(méi)有這文件,我。。。。
接下來(lái)各種調(diào)整(此處省略掉一萬(wàn)字。。。),比如說(shuō)生怕寫入動(dòng)作一定要釋放變量后才真正執(zhí)行,就在寫入后趕緊將TStringlist給free掉,或者改成了用函數(shù)對(duì)TextFile的文件操作,強(qiáng)制刷入磁盤,結(jié)果無(wú)一例外,還是和之前一樣。
不信邪于是新建了一個(gè)工程來(lái)試,結(jié)果跌大眼鏡,這段代碼在新工程里可以正確無(wú)誤的執(zhí)行。看來(lái)問(wèn)題出現(xiàn)在工程設(shè)置上,因?yàn)槲疫@個(gè)工程是從舊版本升級(jí)來(lái)的,估計(jì)有一些設(shè)置沒(méi)有配上。對(duì)工具仔細(xì)比對(duì)了兩個(gè)dproj文件,在差異處沒(méi)看出什么道道來(lái),又在菜單project——option里面看,也是一無(wú)所獲。準(zhǔn)備關(guān)掉option對(duì)話框的時(shí)候,隨手把manifest的設(shè)置點(diǎn)了一下,原來(lái)是none,改成了auto generate。關(guān)掉了再運(yùn)行,居然正確了,瞎貓竟然碰到了死老鼠!
查了一下manifest的作用,原來(lái)Application manifest相當(dāng)于程序的配置和說(shuō)明,在XP的時(shí)候提出,在Vista的時(shí)候做了改進(jìn)。估計(jì)我之前的程序從老版本Delphi升級(jí)過(guò)來(lái),manifest部分沒(méi)有設(shè)置,所以win10將程序作為老式程序,在兼容模式下運(yùn)行了,老程序是可以寫入C盤根目錄的,當(dāng)然是假的寫入,只在本進(jìn)程內(nèi)可見(jiàn)。當(dāng)我檢測(cè)到可以寫入,但真正調(diào)用Excel來(lái)導(dǎo)出的時(shí)候就報(bào)錯(cuò)了。當(dāng)我生成manifest,運(yùn)行在真實(shí)模式的時(shí)候,終于得出了真正的結(jié)果。而那個(gè)新工程因?yàn)槭切掳姹綝elphi建立的,默認(rèn)就設(shè)置了manifest,所以運(yùn)行一切正常。
挖掘到了manifest這個(gè)寶藏,還順便解決了困擾我的一些問(wèn)題。比如說(shuō),在里面勾選允許run time themes,工具欄上面的圖標(biāo)顯示也正常了,不會(huì)在顯示在偏上的位置。DPI(manifest自動(dòng)生成之后,這一項(xiàng)也會(huì)自動(dòng)選上)選擇系統(tǒng)識(shí)別或者顯示器識(shí)別,原來(lái)在高分辨率下顯示模糊的程序也清晰了,perfect!
下面是一篇有關(guān)windows程序manifest說(shuō)明的文章:
http://www.softwareace.cn/?p=1207
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。