2013年9月1日 星期日

Properties.System.Media.Duration.Value在 server 2012會成為null !?

在製做多媒體後台時,一定會使用到一些媒體相關的函數
最常在問的就是該媒體播放時間多久(以供廣告成本推估參考)
c#在這方面是有範例
參考這個連結
總之就是下載WindowsAPICodePack,呼叫shell
--------------------------------------------------------------
ShellFile so = ShellFile.FromFilePath(file);
double nanoseconds = 0;
Double.TryParse(so.Properties.System.Media.Duration.Value.ToString(), nanoseconds );
注意這裡取得的 nanoseconds 的單位是 100 nanoseconds,所以要換算成秒的話,可以將變數 nanoseconds 乘以 0.0001 再除以 1000。
--------------------------------------------------------------
很簡單吧,那我幹嘛寫這篇?
以上是在win7 ultimate ,vs2012跑的,很正常,也很稱職
問題來了,如果是在windows server 2012 的vs2012呢?
對不起,Properties.System.Media.Duration.Value.ToString()會出現null
最基本的原因是server 2012預設是不灌media player的,而上述的函數靠的就是呼叫shell去叫media player功能.
所以在server 2012要執行這程式時,請安裝media player
怎麼裝?參考這連結 
裝完就沒事嗎?代志不是這樣就收工去領便當了
請把之前下載的WindowsAPICodePack的「source\WindowsAPICodePack」下的「WindowsAPICodePack」方案(solution)下的core、shell等專案(project)的建置目標都改為64位元平台,build一下,再把你之前要呼叫Properties.System.Media.Duration.Value的專案參考到你build出來的dll(Microsoft.WindowsAPICodePack.Shell.dll & Microsoft.WindowsAPICodePack.dll)

以上,加油了

沒有留言:

張貼留言