程序一直报这个错误,崩溃了两天,今天在dev论坛上搜到大牛的解释,才算明白过来。
地址是:
http://www.devdiv.net/bbs/viewthread.php?tid=18042&highlight=%BE%B2%C4%AC%B0%B2%D7%B0
在写这个程序之前我的的确确是扫了一眼下面的代码,也想了一下那些参数是干什么的呢,干什么的呢?
iOptions.iUpgrade = SwiUI::EPolicyNotAllowed;
iOptions.iOCSP = SwiUI::EPolicyNotAllowed;
iOptions.iDrive = 'C';
iOptions.iUntrusted = SwiUI::EPolicyNotAllowed;
iOptions.iCapabilities = SwiUI::EPolicyNotAllowed;
然后我就无视了,真想抽自己几下。。离问题的原因如此之近,确看不到。
就是这些参数的问题了。
从swinstdefs.h里可以找到错误的描述。
// Errors
const TInt KSWInstErrUserCancel = -30471; // User cancelled the operation
const TInt KSWInstErrFileCorrupted = -30472; // File is corrupted
const TInt KSWInstErrInsufficientMemory = -30473; // Insufficient free memory in the drive to perform the operation
const TInt KSWInstErrPackageNotSupported = -30474; // Installation of the package is not supported
const TInt KSWInstErrSecurityFailure = -30475; // Package cannot be installed due to security error
const TInt KSWInstErrMissingDependency = -30476; // Package cannot be installed due to missing dependency
const TInt KSWInstErrFileInUse = -30477; // Mandatory file is in use and prevents the operation
const TInt KSWInstErrGeneralError = -30478; // Unknown error
const TInt KSWInstErrNoRights = -30479; // The package has no rights to perform the operation
const TInt KSWInstErrNetworkFailure = -30480; // Indicates that network failure aborted the operation
const TInt KSWInstErrBusy = -30481; // Installer is busy doing some other operation
const TInt KSWInstErrAccessDenied = -30482; // Target location of package is not accessible
const TInt KSWInstUpgradeError = -30483; // The package is an invalid upgrade
-30475 是安全原因,应该是程序的uid不属于 挪鸡鸭的授权id。
把 iOptions.iUntrusted = SwiUI::EPolicyAllowed;
设置成允许,就成了。。
然后我又想到了个问题,如果用户的手机 程序管理->设置->软件安装 这里选择的是仅限已注册的程序,是不是还是-30475
经测试果然还是。。接着研究了。。。
流氓就流氓到极致。我的想法是把那里是不是可以改成全部。。
然后又搜到一个大牛的回复
地址是:
http://www.devdiv.net/bbs/viewthread.php?tid=17747&rpid=118393&ordertype=0&page=1#pid118393
可以修改:
代码如下
CRepository* rep = CRepository::NewLC(TUid::Uid(0x101fd64d));
rep->Set(0x3,0x1);
CleanupStack::PopAndDestroy(rep);
需要WriteDeviceData能力
在E66上测试通过。。
然后我把程序管理->设置->软件安装 这里设置成仅限已注册的程序,然后开始安装 网秦的手机卫士,然后竟然弹出联网选择对话框。。。崩溃一下,够流氓。
然后我测试了下,使用这个参数,
iOptions.iOptionalItems = SwiUI::EPolicyNotAllowed;
没顶用,我没有办法屏蔽网秦的联网对话框。
不知有没有大牛可以给个提示。。
但是这个问题不影响自己静默安装自己的程序,无伤大雅。
最后在感叹一下网秦的牛逼。。安装着都能去上网,有点疑惑的是 自己点击安装就不提示联网,在连接管理里面也没有发现联网。。难道人家已经出神入化