2011-06-10 65 views
0

我想創建一個Windows Mobile應用程序並從我的網站分發它,但我不想購買代碼簽名證書。 我有HTC Diamond2智能手機(WM6.1),它允許我運行我的未簽名的應用程序。雖然我的應用程序連接到網絡並撥打電話,但它並未給出警告。另外,幾年前我有一臺Windows Mobile 4.0設備,而且它也不需要簽名。所以我一直認爲代碼簽名對Windows Mobile來說不是必需的。但最近我讀到它可以要求?Windows Mobile應用程序需要代碼簽名嗎?

所以問題是:如果我從我的網站向全球發佈我的應用程序,有多少用戶將無法使用它,因爲它沒有被簽名?我的意思是什麼比例?也許在不同的國家有所不同?也許在大多數手機銷售鎖定的國家/地區都需要進行簽名,而在手機通常售出的國家/地區已解鎖,不需要簽名?

請在這個問題上給我啓發。

+0

我已經發布了一種方法來刪除某些Windows Mobile設備在C++中的代碼簽名要求。 – 2011-07-16 02:19:22

回答

0

設備製造商在構建操作系統時可以指定不同的安全級別。在最高級別,您需要簽署您的應用程序。在最低級別,您可以將可執行文件複製到設備並運行。即使沒有簽名,也有中間級別允許通過CAB文件安裝的應用程序運行。一般來說,如果設備是從手機運營商處購買的,則可能需要簽署應用程序(或破解設備)。如果設備是從製造商處購買的,並且您添加了自己的SIM卡,則很可能不需要簽名。根據我的經驗,更多的WM6設備具有比WM5設備更高的安全設置。

0

您可以修改某些註冊表項以使其可以在設備上運行任何可執行文件。在默認的Windows Mobile 6.0設備上,您會看到「是否允許_.exe運行?」彈出。如果您單擊是,並且程序使註冊表修改並重新啓動設備,則任何應用程序都可以運行。

// Checks to see if the policies in the registry need to be adjusted to allow 
// an unsigned program to run. This also affects WCELOAD.EXE as well. 
// This is needed to run some programs on Windows Mobile 6 from an unsigned application. 
void UpdatePolicy() 
{ 
    BOOL bPolicyNeedsUpdate = FALSE; 
    DWORD dwExistingPolicy = 0; 
    DWORD dwNewPolicy = 0; 
    HKEY hKey = NULL; 
    DWORD dwSize = sizeof(DWORD); 

    RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("Security\\Policies\\Policies"), 0, NULL, 0, 
     KEY_ALL_ACCESS, NULL, &hKey, NULL); 
    // See if the policy has already been adjusted. 
    if (hKey != NULL) 
    { 
     DWORD dwType = 0; 
     RegQueryValueEx(hKey, _T("0000101a"), NULL, &dwType, (LPBYTE)&dwExistingPolicy, &dwSize); 
     if (dwExistingPolicy != 1) 
      bPolicyNeedsUpdate = TRUE; 
    } 
    if (bPolicyNeedsUpdate) 
    { 
     // Adjust the policy 
     dwNewPolicy = 1; 
     RegSetValueEx(hKey, _T("0000101a"), NULL, REG_DWORD, (const BYTE*)&dwNewPolicy, dwSize); 
     RegSetValueEx(hKey, _T("00001001"), NULL, REG_DWORD, (const BYTE*)&dwNewPolicy, dwSize); 
     dwNewPolicy = 40; 
     RegSetValueEx(hKey, _T("00001005"), NULL, REG_DWORD, (const BYTE*)&dwNewPolicy, dwSize); 
     dwNewPolicy = 144; 
     RegSetValueEx(hKey, _T("00001017"), NULL, REG_DWORD, (const BYTE*)&dwNewPolicy, dwSize); 
     // Reboot so the changes take effect 
     Reboot(); 
    } 
    RegCloseKey(hKey); 
} 

void Reboot() 
{ 
    SetSystemPowerState(NULL, POWER_STATE_RESET, 0); 
} 
相關問題