This repository was archived by the owner on Sep 14, 2022. It is now read-only.
forked from nineto4/react-native-code-push
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCodePushUtils.cs
More file actions
158 lines (136 loc) · 4.89 KB
/
CodePushUtils.cs
File metadata and controls
158 lines (136 loc) · 4.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
using Newtonsoft.Json.Linq;
using PCLStorage;
using System;
using System.Diagnostics;
using System.IO;
using System.Management;
using System.Threading.Tasks;
namespace CodePush.ReactNative
{
internal partial class CodePushUtils
{
class ApplicationInfo
{
public ApplicationInfo()
{
var info = FileVersionInfo.GetVersionInfo(Environment.GetCommandLineArgs()[0]);
Version = $"{info.FileMajorPart}.{info.FileMinorPart}.{info.FileBuildPart}";
CompanyName = string.IsNullOrEmpty(info.CompanyName) ? info.ProductName : info.CompanyName;
ProductName = info.ProductName;
}
public string Version { private set; get; }
public string CompanyName { private set; get; }
public string ProductName { private set; get; }
}
static ApplicationInfo applicationInfo = new ApplicationInfo();
static string _bundlePath;
internal static string GetFileBundlePrefix()
{
// For Windows desktop application the prefix of a bundle is the full path to the folder where
// bundle should be installed.
//
// Desktop application can be installed at any location, the most popular are:
// - User local data folder, in this case the bundle can be stored in the same location and be
// unique for the user.
// - Program Files folder, in this case the application is unique for the system and will be shared
// amoung all users of the system, the bundle should be unique for the system as well.
// Commonly, user has no write access to Program Files folder or at least admin privileges have to been requested.
// In this case the bundle will be stored in ProgramData folder as it is recommended by MS.
if (!string.IsNullOrEmpty(_bundlePath))
{
return _bundlePath;
}
_bundlePath = GetAppFolder();
if (!HasWriteAccessToFolder(_bundlePath))
{
_bundlePath = $"{Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), applicationInfo.CompanyName, applicationInfo.ProductName, applicationInfo.Version)}\\";
}
return _bundlePath;
}
internal async static Task<JObject> GetJObjectFromFileAsync(IFile file)
{
string jsonString = await file.ReadAllTextAsync().ConfigureAwait(false);
if (jsonString.Length == 0)
{
return new JObject();
}
try
{
return JObject.Parse(jsonString);
}
catch (Exception)
{
return null;
}
}
static string GetDeviceIdImpl()
{
var mbId = GetSerialNumber();
var procId = GetProcId();
if (string.IsNullOrEmpty(procId))
{
procId = GetMAC();
}
return procId + '-' + mbId;
}
static string GetSerialNumber()
{
var mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
var moc = mos.Get();
var mbId = String.Empty;
foreach (ManagementObject mo in moc)
{
mbId = (string)mo["SerialNumber"];
if (!string.IsNullOrEmpty(mbId))
break;
}
return mbId;
}
static string GetProcId()
{
var mos = new ManagementObjectSearcher("Select * From Win32_processor");
var moc = mos.Get();
var procId = string.Empty;
foreach (ManagementObject mo in moc)
{
procId = (string)mo["ProcessorID"];
if (!string.IsNullOrEmpty(procId))
break;
}
return procId;
}
static string GetMAC()
{
var mos = new ManagementObjectSearcher("Select * From Win32_NetworkAdapterConfiguration");
var moc = mos.Get();
var mac = string.Empty;
foreach (ManagementObject mo in moc)
{
try
{
if ((bool)mo["IPEnabled"])
{
mac = (string)mo["MacAddress"];
break;
}
}
catch (Exception)
{
}
}
return mac;
}
static bool HasWriteAccessToFolder(string path)
{
try
{
File.Open(Path.Combine(path, ".security-check"), FileMode.OpenOrCreate).Close();
return true;
}
catch
{
return false;
}
}
}
}