2011-06-10 40 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); 
} 
相关问题