2014-11-08 28 views
0

我有一個基於Environment.Is64BitOperatingSystem和ProcessorArchitecture的安裝應用程序的主exe文件選擇了文件夾安裝和註冊表配置單元的簡單安裝程序。例如。如果ProcessorArchitecture是MSIL和Windows是64位我知道應用程序將被執行爲64位,因此它應該安裝在「C:\ Program Files文件」和應用程序應該使用Windows註冊表的64位視圖。從程序集中獲取prefer-32bit標誌的值

但我有問題與程序集編譯在.NET框架4.5與設置構建標誌首選-32位。像這樣的應用程序將作爲32位進程在64位系統上運行,因此它應該存儲在「Program Files(x86)」文件夾中。但是,此應用程序的ProcessorArchitecture將仍然是MSIL,因此我的決策算法將失敗。是否有可能從程序集中獲得Prefer-32bit標誌?

由於

回答

0

Module.GetPEKind方法返回包含一個Preferred32Bit值PortableExecutableKinds標誌。

Assembly assembly = Assembly.LoadFile(file); 
Module manifest = assembly.ManifestModule; 
PortableExecutableKinds kind; 
ImageFileMachine platform; 
manifest.GetPEKind(out kind, out platform); 
if((kind & PortableExecutableKinds.Preferred32Bit) != 0) 
{ 
    //is Prefer-32bit 
} 
0

喜歡這個應用程序將64位系統上運行32位的進程和 因此應該存儲在「程序文件(x86)」文件夾中。

注意AnyCPU可執行程序將運行作爲任何請求& 可能的

它可以運行爲32位或64位,因此可以說一個應該在一個文件夾中,或不是,有點奇怪。即使preffered32bit已啓用,但這並不意味着它將作爲32位進程運行。

如果您的64位應用程序啓動您的AnyCPU應用程序,它將運行64位進程(因爲沒有其他選項 - 否則它會崩潰)。一些體系結構甚至不支持32位仿真(ARM處理器),例如「首選32位」不會有太大的作用。

除非有瘋狂的很好的理由,我建議你讓事情變得簡單,並安裝AnyCPU組件到C:\ Program Files文件(x86)的文件夾。這將更易於理解。

PS,技術上,AnyCPU組件被標記爲32bit的,如果你使用PEInspect或similiar程序(你會看到它們被標記32位,pedump,正因爲如此,這將是正確的給他們派上ProgramFilesFolder目錄)。

「AnyCPU」概念是在.NET框架的幫助下內部實現的。