SilentInst -30475 错误,静默安装的解决办法

程序一直报这个错误,崩溃了两天,今天在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;

没顶用,我没有办法屏蔽网秦的联网对话框。

不知有没有大牛可以给个提示。。

但是这个问题不影响自己静默安装自己的程序,无伤大雅。

最后在感叹一下网秦的牛逼。。安装着都能去上网,有点疑惑的是 自己点击安装就不提示联网,在连接管理里面也没有发现联网。。难道人家已经出神入化

你可能感兴趣的:(安装)