Win7之家( www.airtaxifl.com):Windows7軟件開(kāi)發(fā)示例:UAC、系統(tǒng)版本、權(quán)限
本文作者:魏偉,微軟MVP(微軟最有價(jià)值專(zhuān)家),產(chǎn)品設(shè)計(jì)&系統(tǒng)架構(gòu)師,研發(fā)的產(chǎn)品主要有電話會(huì)議服務(wù)、移動(dòng)代理服務(wù)器、無(wú)線開(kāi)發(fā)中間件等。
看到Win7的酷炫功能流口水,已經(jīng)忍不住想擁抱呢?別急,Win7的脾氣可不好,要想擁抱它的新功能,我們的軟件必須嫁給它——在Win7下能正常運(yùn)行。,個(gè)人開(kāi)發(fā)者開(kāi)發(fā)的中小軟件,功能相對(duì)簡(jiǎn)單,與系統(tǒng)的緊密程度普遍較低,添加一些Win7必要的正常運(yùn)行的元素就OK啦!
嫁給Win7的必要條件
我們必須要給軟件添加的是系統(tǒng)版本檢測(cè)和安裝路徑選擇元素,為什么要考慮它們呢?
必要條件1:檢測(cè)系統(tǒng)版本
軟件在運(yùn)行初期需要判斷操作系統(tǒng)的類(lèi)型及版本號(hào),并根據(jù)操作系統(tǒng)類(lèi)型執(zhí)行特定的代碼,相同的功能在不同操作系統(tǒng)上可能會(huì)執(zhí)行不同的代碼。大多數(shù)軟件的在Win7下無(wú)法正常運(yùn)行都是因?yàn)榕袛嗖僮飨到y(tǒng)版本失敗造成的。
當(dāng)版本檢測(cè)出錯(cuò)時(shí),很多軟件也會(huì)跟著出錯(cuò),用戶可能會(huì)發(fā)現(xiàn)雙擊軟件圖片后,什么反映都沒(méi)有,或者可能會(huì)看到一個(gè)對(duì)話框“你必須運(yùn)行在Microsoft Windows XP或更新版本”,但實(shí)際上計(jì)算機(jī)已經(jīng)安裝了Win7 。
必要條件2:適應(yīng)用戶權(quán)限
Win7默認(rèn)運(yùn)行的是非管理員賬號(hào),權(quán)限相對(duì)較小。而軟件的安裝程序會(huì)往包括系統(tǒng)盤(pán)的Program Files、Windows安裝目錄、注冊(cè)表中寫(xiě)入一些數(shù)據(jù)(軟件在運(yùn)行時(shí)可能會(huì)將一些用戶數(shù)據(jù)保存到系統(tǒng)文件夾或注冊(cè)表中),如果當(dāng)前用戶的權(quán)限不夠,軟件就無(wú)法正常入駐Win7。
小知識(shí): UAC是一種降低Windows用戶默認(rèn)權(quán)限的辦法,這樣會(huì)給用戶帶來(lái)安全性的提高,它可以一定程度上遏制了一些病毒的發(fā)作——關(guān)閉殺毒軟件、啟動(dòng)復(fù)制及散播病毒進(jìn)程、注入網(wǎng)游客戶端、監(jiān)聽(tīng)鍵盤(pán)操作從而盜竊密碼。
例如數(shù)據(jù)看似保存成功,在寫(xiě)入的地點(diǎn)卻找不到,或者注銷(xiāo)切換到另一個(gè)Windows用戶時(shí),無(wú)法找到保存的數(shù)據(jù)。引起這類(lèi)問(wèn)題的根源是Win7的UAC機(jī)制,它降低了Windows用戶的默認(rèn)權(quán)限,使得一些普通操作無(wú)法更改系統(tǒng)設(shè)置及系統(tǒng)保護(hù)的文件夾。
小提示:軟件要結(jié)合系統(tǒng)某些功能時(shí),需要調(diào)用相應(yīng)的API。API調(diào)用得當(dāng)否,對(duì)軟件運(yùn)行非常關(guān)鍵,我們從下期開(kāi)始結(jié)合Win7酷炫功能,單獨(dú)介紹如何正確的調(diào)用。Win7最新的API,有Win7特有的任務(wù)欄個(gè)性化快捷菜單(Jump List)、程序圖標(biāo)輪廓效果(Icon Overlay)、程序圖標(biāo)進(jìn)度條效果(Progress Bar)、標(biāo)簽式縮略圖(Tabbed Thumbnail)和縮略圖工具欄(Thumbnail Toolbar)……
“婚禮”必要的元素
我們的軟件要順利嫁給Win7,在軟件中要添加以下的元素。
1.代碼檢測(cè)操作系統(tǒng)版本號(hào)
在軟件中添加判斷操作系統(tǒng)是Win7 或2008 Server的代碼:
C#
if (Environment.OSVersion.Version > new Version(5, 1))
{MessageBox.Show("Windows 7 or Windows 2008 Server","Operating System",
MessageBoxButtons.OK,MessageBoxIcon.Error);
return;
}
2.盡量將數(shù)據(jù)存儲(chǔ)在非系統(tǒng)盤(pán)
軟件不要默認(rèn)安裝到系統(tǒng)盤(pán),在編寫(xiě)軟件安裝路徑時(shí),要考慮這個(gè)。此外,還需要在軟件中添加修改讀寫(xiě)注冊(cè)表的代碼,使用HKEY_CURRENT_USER\Software下的鍵值作為存儲(chǔ)數(shù)據(jù)的結(jié)點(diǎn):
static void Main(string[] args)
{
var registryKey = Registry.CurrentUser.CreateSubKey(
@"Software\test");
registryKey.SetValue("name", "zswang");
registryKey = Registry.CurrentUser.OpenSubKey(@"Software\test");
Console.WriteLine(string.Format("{0}={1}\r\n",
"name", registryKey.GetValue("name")));
}
3.提高程序的運(yùn)行權(quán)限
如果用戶使用了管理員身份進(jìn)入系統(tǒng),又希望把軟件安裝在系統(tǒng)盤(pán),又該如何呢?需要判斷用戶權(quán)限的權(quán)限,簡(jiǎn)單的解決方案是添加清單文件。在可執(zhí)行文件夾中找到與可執(zhí)行文件相同名字且擴(kuò)展名.manifest的文件,輸入以下代碼即可:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="test"
type="win32"/>
<description>Description of your application</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
評(píng)論列表
查看所有 條評(píng)論