在安装软件时,我想检测操作系统,如果它是“ Windows 10 Pro”或“ Windows Server 2012”,则应弹出一个消息框,并应停止安装。
我正在使用下面的代码段。但是,即使操作系统是“ Windows 10 Pro”,此处也不会弹出消息框。
public static void createSnackbar(Context context, Integer snackbarLength, String textMessage,
CoordinatorLayout coordinatorLayout) {
Snackbar snackbar = Snackbar.make(coordinatorLayout, textMessage, snackbarLength);
View snackBarView = snackbar.getView();
CoordinatorLayout.LayoutParams params=(CoordinatorLayout.LayoutParams) snackBarView.getLayoutParams();
params.gravity = Gravity.TOP;
snackBarView.setLayoutParams(params);
int snackbarTextId = android.support.design.R.id.snackbar_text;
TextView textView = snackBarView.findViewById(snackbarTextId);
textView.setTextColor(context.getResources().getColor(R.color.red_dark));
snackBarView.setBackgroundColor(context.getResources().getColor(R.color.colorWood));
snackbar.show();
}
是正确的方法还是有什么方法可以检测到操作系统并显示消息框?
答案 0 :(得分:0)
我不太了解为什么需要这些限制,但是您可以:
!include WinVer.nsh
!define /IfNDef PRODUCT_PROFESSIONAL 0x00000030
!define /IfNDef PRODUCT_PROFESSIONAL_N 0x00000031
!define /IfNDef PRODUCT_PRO_WORKSTATION 0x000000A1
!define /IfNDef PRODUCT_PRO_WORKSTATION_N 0x000000A2
!define /IfNDef ERROR_INSTALL_REJECTED 1654
Function .onInit
System::Call 'KERNEL32::GetProductInfo(i6,i1,i0,i0,*i0r1)'
${WinVerGetBuild} $2
${If} ${IsServerOS} ; Windows Server?
${AndIf} $2 U>= 9200 ; Server 2012?
${AndIf} $2 U< 9600 ; and not Server 2012 R2?
Goto die_unsupported_os
${EndIf}
${If} $2 U>= 9800 ; Windows 10?
${AndIfNot} ${IsServerOS} ; Not Windows Server?
${If} $1 = ${PRODUCT_PROFESSIONAL}
${OrIf} $1 = ${PRODUCT_PROFESSIONAL_N}
${OrIf} $1 = ${PRODUCT_PRO_WORKSTATION}
${OrIf} $1 = ${PRODUCT_PRO_WORKSTATION_N}
die_unsupported_os:
MessageBox mb_IconStop|mb_OK "Not allowed to run on this version of Windows for some reason!" /SD IDOK
SetErrorLevel ${ERROR_INSTALL_REJECTED}
Quit
${EndIf}
${EndIf}
FunctionEnd
注意:Windows Insider内部版本也被标识为Pro,因此您最终也会阻止它们。