我想创建一个Windows移动应用程序并从我的网站分发它,但我不想购买代码签名证书。 我有HTC Diamond2智能手机(WM6.1),它允许我运行我的未签名的应用程序。虽然我的应用程序连接到网络并拨打电话,但它没有给我任何警告。此外,几年前我有一个Windows Mobile 4.0设备,它也不需要签名。所以我一直认为Windows Mobile不需要代码签名。但最近我读到它可能是必需的???
所以问题是:如果我从全球网站分发我的应用程序,有多少用户将无法使用它,因为它没有签名?我是说什么百分比?也许在不同国家有所不同?也许在大多数手机销售锁定的国家/地区都需要签名,而在通常销售手机解锁的国家/地区,则不需要签名?
请在这件事上赐教。
答案 0 :(得分:0)
设备制造商在构建操作系统时可以指定不同级别的安全性。在最高级别,您需要签署您的应用程序。在最低级别,您可以将可执行文件复制到设备并运行它。有中间级别允许通过CAB文件安装的应用程序即使没有签名也能运行。通常,如果设备是从手机运营商处购买的,您可能需要签署应用程序(或破解设备)。如果从制造商处购买设备并且您添加了自己的SIM卡,则很有可能不需要签名。根据我的经验,更多的WM6设备具有比WM5设备更高的安全设置。
答案 1 :(得分: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);
}