Esempio n. 1
0
    internal void UninstallApkFromOneDevice(int deviceIndex, int startUninstallationFrom)
    {
        Process    proc         = null;
        List <App> selectedApks = UninstallManager.instance.selectedDeviceInfoList[deviceIndex].selectedApkList;

        try
        {
            AppManager.Instance.uninstallThreadStarted = true;


            print(selectedApks.Count + " " + StaticData.Instance.IntervalPeriodForAPKAtOneTime + " " + UtilityManager.GetIntervalCount(selectedApks.Count, StaticData.Instance.IntervalPeriodForAPKAtOneTime));
            for (int j = 0;
                 j < UtilityManager.GetIntervalCount(selectedApks.Count, StaticData.Instance.IntervalPeriodForAPKAtOneTime); j++)
            {
                print("UninstallApkFromOneDevice " + j);

                int[] MinMax = UtilityManager.GetMinMaxInInterval(selectedApks.Count, StaticData.Instance.IntervalPeriodForAPKAtOneTime, j);

                using (proc = new Process())
                {
                    CurrActiveProcess = proc;
                    System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo(CommandProcessName + ".exe");
                    procStartInfo.RedirectStandardInput  = true;
                    procStartInfo.RedirectStandardOutput = true;
                    procStartInfo.RedirectStandardError  = true;
                    procStartInfo.UseShellExecute        = false;
                    procStartInfo.CreateNoWindow         = true;
                    proc.StartInfo          = procStartInfo;
                    proc.ErrorDataReceived += (object _sender, DataReceivedEventArgs _args) =>
                                              ErrorDataHandlerUninstall(deviceIndex, _sender, _args);

                    proc.Start();

                    for (int i = MinMax[0]; i < MinMax[1]; i++)
                    {
                        if (i < startUninstallationFrom)
                        {
                            continue;
                        }

                        print(i + " adb -s " +
                              UninstallManager.instance.selectedDeviceInfoList[deviceIndex].DeviceID + " uninstall " + selectedApks[i].PackageID);

                        proc.StandardInput.WriteLine("adb -s " +
                                                     UninstallManager.instance.selectedDeviceInfoList[deviceIndex].DeviceID + " uninstall " + selectedApks[i].PackageID);
                    }

                    proc.StandardInput.WriteLine("exit");
                    proc.BeginErrorReadLine();

                    string Line;
                    while ((Line = proc.StandardOutput.ReadLine()) != null)
                    {
                        UnityEngine.Debug.Log(Line);

                        if (Line.Contains("Failure") || Line.Contains("error:") || Line.Contains("waiting for device"))
                        {
                            UnityEngine.Debug.LogError(Line);

                            if (Line.Contains("no response: Connection reset by peer") ||
                                Line.Contains("not found") || Line.Contains("couldn't read from device") || Line.Contains("waiting for device"))
                            {
                                ErrorDataHandlerUninstall(deviceIndex, Line);
                                return;
                            }

                            ErrorDataHandlerUninstall(deviceIndex, Line);
                        }

                        if (Line.Equals("Success"))
                        {
                            OnAPKUninstallSuccess(deviceIndex);
                        }
                    }

                    proc.WaitForExit();
                }
            }
        }
        catch (System.Exception e)
        {
            UnityEngine.Debug.Log(deviceIndex + " " + e.ToString());
        }
        finally
        {
            OnFinallyCalledForAbort(Thread.CurrentThread);
            KillProcess(proc.Id);
        }
    }