You've already forked devscripts
mirror of
https://github.com/DoublesunRUS/devscripts.git
synced 2026-06-11 22:46:51 +02:00
Обновление платформ
This commit is contained in:
+190
-212
@@ -22,298 +22,276 @@
|
||||
// SOFTWARE.
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
const URL_RELEASE ="https://releases.1c.ru"
|
||||
const URL_LOGIN ="https://login.1c.ru"
|
||||
const URL_DOWNLOAD ="%URL_RELEASE/version_file"
|
||||
const URL_RELEASE = "https://releases.1c.ru"
|
||||
const URL_LOGIN = "https://login.1c.ru"
|
||||
const URL_DOWNLOAD = "%URL_RELEASE/version_file"
|
||||
|
||||
|
||||
exception ExceptionDL1C
|
||||
;
|
||||
|
||||
exception ExceptionDL1C;
|
||||
|
||||
method updateCookies(cookies: Map, host: String, setCookie: String|Undefined)
|
||||
if setCookie is Undefined
|
||||
return
|
||||
;
|
||||
|
||||
if setCookie is Undefined
|
||||
return;
|
||||
val thisCookies = new Map()
|
||||
|
||||
val thisCookies = new Map()
|
||||
for cookie in setCookie.Split(";")
|
||||
val pair = cookie.Split("=")
|
||||
val key = pair[0].Trim()
|
||||
if key == "Path" or key == "Expires" or pair.Size() == 1 // don't worry
|
||||
continue
|
||||
;
|
||||
val value = pair.Size() == 1 ? "" : pair[1].Trim()
|
||||
thisCookies.Insert(key, value)
|
||||
;
|
||||
|
||||
for cookie in setCookie.Split(";")
|
||||
val pair = cookie.Split("=")
|
||||
val key = pair[0].Trim()
|
||||
if key == "Path" or key == "Expires" or pair.Size() == 1 // don't worry
|
||||
continue;
|
||||
val value = pair.Size() == 1 ? "" : pair[1].Trim()
|
||||
thisCookies.Insert(key, value)
|
||||
;
|
||||
var realHost = thisCookies.ContainsKey("Domain") ? thisCookies.Get("Domain") : host
|
||||
if not realHost.StartsWith(".")
|
||||
realHost = "." + realHost
|
||||
;
|
||||
|
||||
var realHost = thisCookies.ContainsKey("Domain") ? thisCookies.Get("Domain") : host
|
||||
if not realHost.StartsWith(".")
|
||||
realHost = "." + realHost
|
||||
;
|
||||
|
||||
val hostCookies = cookies.ContainsKey(realHost) ? cookies.Get(realHost) : new Map()
|
||||
if not cookies.ContainsKey(realHost)
|
||||
cookies.Insert(realHost, hostCookies)
|
||||
;
|
||||
|
||||
for item in thisCookies
|
||||
if item.Key == "Domain"
|
||||
continue;
|
||||
hostCookies.Insert(item.Key, item.Value)
|
||||
;
|
||||
val hostCookies = cookies.ContainsKey(realHost) ? cookies.Get(realHost) : new Map()
|
||||
if not cookies.ContainsKey(realHost)
|
||||
cookies.Insert(realHost, hostCookies)
|
||||
;
|
||||
|
||||
for item in thisCookies
|
||||
if item.Key == "Domain"
|
||||
continue
|
||||
;
|
||||
hostCookies.Insert(item.Key, item.Value)
|
||||
;
|
||||
;
|
||||
|
||||
method getCookie(cookies: Map, host: String): String
|
||||
|
||||
var result = ""
|
||||
var result = ""
|
||||
|
||||
val realHost = "." + host
|
||||
val realHost = "." + host
|
||||
|
||||
for hostItem in cookies
|
||||
if not realHost.EndsWith(hostItem.Key)
|
||||
continue;
|
||||
|
||||
for cookie in hostItem.Value
|
||||
result = result + "; " + cookie.Key + (cookie.Value.IsEmpty() ? "" : "=" + cookie.Value)
|
||||
;
|
||||
;
|
||||
for hostItem in cookies
|
||||
if not realHost.EndsWith(hostItem.Key)
|
||||
continue
|
||||
;
|
||||
|
||||
return result.IsEmpty() ? result : result.Substring(2)
|
||||
for cookie in hostItem.Value
|
||||
result = result + "; " + cookie.Key + (cookie.Value.IsEmpty() ? "" : "=" + cookie.Value)
|
||||
;
|
||||
;
|
||||
|
||||
return result.IsEmpty() ? result : result.Substring(2)
|
||||
;
|
||||
|
||||
method getHost(url: String): String
|
||||
var result = ""
|
||||
|
||||
var result = ""
|
||||
if url.StartsWith("http://")
|
||||
result = url.Substring("http://".Length())
|
||||
else if url.StartsWith("https://")
|
||||
result = url.Substring("https://".Length())
|
||||
else
|
||||
throw new ExceptionDL1C("Bad URL: %url")
|
||||
;
|
||||
|
||||
if url.StartsWith("http://")
|
||||
result = url.Substring("http://".Length())
|
||||
else if url.StartsWith("https://")
|
||||
result = url.Substring("https://".Length())
|
||||
else
|
||||
throw new ExceptionDL1C("Bad URL: %url")
|
||||
;
|
||||
if result.Contains("/")
|
||||
result = result.SubstringFromBegin(result.Find("/"))
|
||||
;
|
||||
|
||||
if result.Contains("/")
|
||||
result = result.SubstringFromBegin(result.Find("/"))
|
||||
;
|
||||
|
||||
return result
|
||||
return result
|
||||
;
|
||||
|
||||
method baseUrl(url: String): String
|
||||
var result = ""
|
||||
|
||||
var result = ""
|
||||
if url.StartsWith("http://")
|
||||
result = "http://"
|
||||
else if url.StartsWith("https://")
|
||||
result = "https://"
|
||||
else
|
||||
throw new ExceptionDL1C("Bad URL: %url")
|
||||
;
|
||||
|
||||
if url.StartsWith("http://")
|
||||
result = "http://"
|
||||
else if url.StartsWith("https://")
|
||||
result = "https://"
|
||||
else
|
||||
throw new ExceptionDL1C("Bad URL: %url")
|
||||
;
|
||||
|
||||
return result + getHost(url)
|
||||
return result + getHost(url)
|
||||
;
|
||||
|
||||
method extract(text: String, startPattern: String, endPattern: String): String
|
||||
val start = text.Find(startPattern)
|
||||
val end = text.Find(endPattern, start + startPattern.Length())
|
||||
return text.Substring(start + startPattern.Length(), end)
|
||||
val start = text.Find(startPattern)
|
||||
val end = text.Find(endPattern, start + startPattern.Length())
|
||||
return text.Substring(start + startPattern.Length(), end)
|
||||
;
|
||||
|
||||
method exploreWeb(request: HttpRequest, cookies: Map): HttpResponse
|
||||
val requests = [request]
|
||||
val responses = [request.Execute()]
|
||||
updateCookies(cookies, getHost(request.AbsoluteUrl), responses.Last().Headers.GetFirst("Set-Cookie"))
|
||||
|
||||
val requests = [request]
|
||||
val responses = [request.Execute()]
|
||||
updateCookies(cookies, getHost(request.AbsoluteUrl), responses.Last().Headers.GetFirst("Set-Cookie"))
|
||||
|
||||
while responses.Last().StatusCode == 302
|
||||
var location = responses.Last().Headers.GetFirst("Location") as String
|
||||
if location.StartsWith("/")
|
||||
location = baseUrl(requests.Last().AbsoluteUrl) + location
|
||||
;
|
||||
requests.Add(
|
||||
HttpClient.GetRequest(location)
|
||||
.SetCookies(getCookie(cookies, getHost(location)))
|
||||
.SetMaxRedirect(0) // https://github.com/klimenko-1c/dl-1c/issues/1
|
||||
)
|
||||
responses.Add(
|
||||
requests.Last()
|
||||
.Execute()
|
||||
)
|
||||
updateCookies(cookies, getHost(location), responses.Last().Headers.GetFirst("Set-Cookie"))
|
||||
;
|
||||
while responses.Last().StatusCode == 301 or responses.Last().StatusCode == 302
|
||||
var location = responses.Last().Headers.GetFirst("Location") as String
|
||||
if location.StartsWith("/")
|
||||
location = baseUrl(requests.Last().AbsoluteUrl) + location
|
||||
;
|
||||
// https://github.com/klimenko-1c/dl-1c/issues/1
|
||||
requests.Add(HttpClient.GetRequest(location).SetCookies(getCookie(cookies, getHost(location))).SetMaxRedirect(0))
|
||||
|
||||
for i = 0 to responses.Bound() - 1
|
||||
responses[i].Close()
|
||||
;
|
||||
responses.Add(requests.Last().Execute())
|
||||
updateCookies(cookies, getHost(location), responses.Last().Headers.GetFirst("Set-Cookie"))
|
||||
;
|
||||
|
||||
return responses.Last()
|
||||
for i = 0 to responses.Bound() - 1
|
||||
responses[i].Close()
|
||||
;
|
||||
|
||||
return responses.Last()
|
||||
;
|
||||
|
||||
method auth(username: String, password: String): Map
|
||||
val cookies = new Map()
|
||||
use response1 = HttpClient.GetRequest(URL_RELEASE).Execute()
|
||||
updateCookies(cookies, getHost(URL_RELEASE), response1.Headers.GetFirst("Set-Cookie"))
|
||||
val src = response1.Body.ReadAsText()
|
||||
response1.Close()
|
||||
|
||||
val cookies = new Map()
|
||||
use response1 = HttpClient.GetRequest(URL_RELEASE).Execute()
|
||||
updateCookies(cookies, getHost(URL_RELEASE), response1.Headers.GetFirst("Set-Cookie"))
|
||||
val src = response1.Body.ReadAsText()
|
||||
response1.Close()
|
||||
val action = extract(src, "form method=\"post\" id=\"loginForm\" action=\"", "\"")
|
||||
val execution = extract(src, "input type=\"hidden\" name=\"execution\" value=\"", "\"")
|
||||
|
||||
val action = extract(src, "form method=\"post\" id=\"loginForm\" action=\"", "\"")
|
||||
val execution = extract(src, "input type=\"hidden\" name=\"execution\" value=\"", "\"")
|
||||
val body = "inviteCode=" + "&" + "inviteType=" + "&" + "username=%username" + "&" + "password=%password" + "&" + "rememberMe=on"
|
||||
+ "&" + "execution=" + execution.Replace("=", "\%3D") + "&" + "_eventId=submit" + "&" + "geolocation=" + "&"
|
||||
+ "submit=\%D0\%92\%D0\%BE\%D0\%B9\%D1\%82\%D0\%B8"
|
||||
|
||||
val body = "inviteCode="
|
||||
+ "&" + "inviteType="
|
||||
+ "&" + "username=%username"
|
||||
+ "&" + "password=%password"
|
||||
+ "&" + "rememberMe=on"
|
||||
+ "&" + "execution=" + execution.Replace("=", "\%3D")
|
||||
+ "&" + "_eventId=submit"
|
||||
+ "&" + "geolocation="
|
||||
+ "&" + "submit=\%D0\%92\%D0\%BE\%D0\%B9\%D1\%82\%D0\%B8"
|
||||
// https://github.com/klimenko-1c/dl-1c/issues/1
|
||||
val request = HttpClient.PostRequest(URL_LOGIN + action).SetContentType("application/x-www-form-urlencoded")
|
||||
.SetCookies(getCookie(cookies, getHost(URL_LOGIN))).SetBody(body).SetMaxRedirect(0)
|
||||
|
||||
val request = HttpClient.PostRequest(URL_LOGIN + action)
|
||||
.SetContentType("application/x-www-form-urlencoded")
|
||||
.SetCookies(getCookie(cookies, getHost(URL_LOGIN)))
|
||||
.SetBody(body)
|
||||
.SetMaxRedirect(0) // https://github.com/klimenko-1c/dl-1c/issues/1
|
||||
exploreWeb(request, cookies).Close()
|
||||
|
||||
exploreWeb(request, cookies).Close()
|
||||
|
||||
if not cookies.Get("." + getHost(URL_LOGIN)).ContainsKey("TGC")
|
||||
throw new ExceptionDL1C("Auth failed")
|
||||
;
|
||||
if not cookies.Get("." + getHost(URL_LOGIN)).ContainsKey("TGC")
|
||||
throw new ExceptionDL1C("Auth failed")
|
||||
;
|
||||
|
||||
return cookies
|
||||
return cookies
|
||||
;
|
||||
|
||||
method webBodyAsText(url: String, cookies: Map): String
|
||||
val request = HttpClient.GetRequest(url)
|
||||
.SetCookies(getCookie(cookies, getHost(url)))
|
||||
.SetMaxRedirect(0)
|
||||
|
||||
use response = exploreWeb(request, cookies)
|
||||
|
||||
return response.Body.ReadAsText()
|
||||
// https://github.com/klimenko-1c/dl-1c/issues/1
|
||||
val request = HttpClient.GetRequest(url).SetCookies(getCookie(cookies, getHost(url))).SetMaxRedirect(0)
|
||||
|
||||
use response = exploreWeb(request, cookies)
|
||||
|
||||
return response.Body.ReadAsText()
|
||||
;
|
||||
|
||||
method webBodyToFile(url: String, cookies: Map, filename: String)
|
||||
val request = HttpClient.GetRequest(url)
|
||||
.SetCookies(getCookie(cookies, getHost(url)))
|
||||
.SetMaxRedirect(0)
|
||||
|
||||
use response = exploreWeb(request, cookies)
|
||||
|
||||
use write = new File(filename).OpenWritableStream()
|
||||
response.Body.CopyTo(write)
|
||||
// https://github.com/klimenko-1c/dl-1c/issues/1
|
||||
val request = HttpClient.GetRequest(url).SetCookies(getCookie(cookies, getHost(url))).SetMaxRedirect(0)
|
||||
|
||||
use response = exploreWeb(request, cookies)
|
||||
|
||||
use write = new File(filename).OpenWritableStream()
|
||||
response.Body.CopyTo(write)
|
||||
;
|
||||
|
||||
method download(cookies: Map, nick: String, ver: String, path_folder: String, path_version: String, path_filename: String)
|
||||
method download(cookies: Map, nick: String, ver: String, path_folder: String, path_version: String, path_filename: String): String
|
||||
// https://github.com/klimenko-1c/dl-1c/issues/2
|
||||
val url1 = "%URL_DOWNLOAD?nick=%nick&ver=%ver&path=%path_folder\%5C%path_version\%5C%path_filename"
|
||||
|
||||
val url1 = URL_DOWNLOAD
|
||||
+ "?" + "nick=" + nick
|
||||
+ "&" + "ver=" + ver
|
||||
+ "&" + "path=" + path_folder + "\%5C" + path_version + "\%5C" + path_filename // https://github.com/klimenko-1c/dl-1c/issues/2
|
||||
val src = webBodyAsText(url1, cookies)
|
||||
|
||||
val src = webBodyAsText(url1, cookies)
|
||||
val end = src.Find(">Скачать дистрибутив<")
|
||||
val start = src.FindFromEnd("\"", , end - 1)
|
||||
val url2 = src.Substring(start + 1, end - 1)
|
||||
|
||||
val end = src.Find(">Скачать дистрибутив<")
|
||||
val start = src.FindFromEnd("\"",, end - 1)
|
||||
val url2 = src.Substring(start + 1, end - 1)
|
||||
val tmpDir = Files.СоздатьВременныйКаталог(, Ложь)
|
||||
webBodyToFile(url2, cookies, "%tmpDir/%path_filename")
|
||||
|
||||
webBodyToFile(url2, cookies, path_filename)
|
||||
return "%tmpDir/%path_filename"
|
||||
;
|
||||
|
||||
method downloadPlatform(cookies: Map, version: String, prefix: String, extension: String): String
|
||||
|
||||
val path_folder = "Platform"
|
||||
val path_version = version.Replace(".", "_")
|
||||
val path_filename = prefix + "_" + path_version + "." + extension
|
||||
val path_folder = "Platform"
|
||||
val path_version = version.Replace(".", "_")
|
||||
val path_filename = "%{prefix}_%path_version.%extension"
|
||||
|
||||
val nick = path_folder + version.Split(".")[0] + version.Split(".")[1]
|
||||
val nick = path_folder + version.Split(".")[0] + version.Split(".")[1]
|
||||
|
||||
download(cookies, nick, version, path_folder, path_version, path_filename)
|
||||
|
||||
return path_filename
|
||||
return download(cookies, nick, version, path_folder, path_version, path_filename)
|
||||
;
|
||||
|
||||
method downloadPostgres(cookies: Map, version: String, postfix: String, extension: String): String
|
||||
val prefix = "postgresql"
|
||||
|
||||
val prefix = "postgresql"
|
||||
val path_folder = "AddCompPostgre"
|
||||
val path_version = version.Replace(".", "_").Replace("-", "_")
|
||||
val path_filename = prefix + "_" + version.Replace("-", "_") + "_" + postfix + "." + extension
|
||||
|
||||
val path_folder = "AddCompPostgre"
|
||||
val path_version = version.Replace(".", "_").Replace("-", "_")
|
||||
val path_filename = prefix + "_" + version.Replace("-", "_") + "_" + postfix + "." + extension
|
||||
val nick = path_folder
|
||||
|
||||
val nick = path_folder
|
||||
download(cookies, nick, version, path_folder, path_version, path_filename)
|
||||
|
||||
download(cookies, nick, version, path_folder, path_version, path_filename)
|
||||
|
||||
return path_filename
|
||||
return path_filename
|
||||
;
|
||||
|
||||
method downloadConfiguration(cookies: Map, version: String, target: String, isUpdate: Boolean): String
|
||||
val postfix = isUpdate ? "updsetup" : "setup1c"
|
||||
|
||||
val postfix = isUpdate ? "updsetup" : "setup1c"
|
||||
|
||||
val path_folder = target
|
||||
val path_version = version.Replace(".", "_")
|
||||
val path_filename = path_folder + "_" + path_version + "_" + postfix + ".exe"
|
||||
val path_folder = target
|
||||
val path_version = version.Replace(".", "_")
|
||||
val path_filename = path_folder + "_" + path_version + "_" + postfix + ".exe"
|
||||
|
||||
val nick = path_folder
|
||||
val nick = path_folder
|
||||
|
||||
download(cookies, nick, version, path_folder, path_version, path_filename)
|
||||
|
||||
return path_filename
|
||||
download(cookies, nick, version, path_folder, path_version, path_filename)
|
||||
|
||||
return path_filename
|
||||
;
|
||||
|
||||
method main(username: String, password: String, target: String, version: String): String
|
||||
val cookies = auth(username, password)
|
||||
|
||||
val cookies = auth(username, password)
|
||||
|
||||
var path_filename: String
|
||||
if target.StartsWith("config-") or target.StartsWith("update-")
|
||||
path_filename = downloadConfiguration(cookies, version, target.Substring(7), target.StartsWith("update-"))
|
||||
|
||||
else
|
||||
var path_filename: String
|
||||
if target.StartsWith("config-") or target.StartsWith("update-")
|
||||
path_filename = downloadConfiguration(cookies, version, target.Substring(7), target.StartsWith("update-"))
|
||||
|
||||
else
|
||||
|
||||
case target
|
||||
when "platform-win64"
|
||||
path_filename = downloadPlatform(cookies, version, "windows64full", "rar")
|
||||
when "platform-win32"
|
||||
path_filename = downloadPlatform(cookies, version, "windows", "rar")
|
||||
when "platform-osx"
|
||||
path_filename = downloadPlatform(cookies, version, "clientosx", "dmg")
|
||||
when "platform-deb64"
|
||||
path_filename = downloadPlatform(cookies, version, "client", "tar.gz")
|
||||
when "server-win64"
|
||||
path_filename = downloadPlatform(cookies, version, "windows64", "rar")
|
||||
when "server-deb64"
|
||||
path_filename = downloadPlatform(cookies, version, "deb64", "tar.gz")
|
||||
when "thinclient-win64"
|
||||
path_filename = downloadPlatform(cookies, version, "setuptc64", "tar.gz")
|
||||
when "thinclient-win32"
|
||||
path_filename = downloadPlatform(cookies, version, "setuptc", "tar.gz")
|
||||
when "thinclient-osx"
|
||||
path_filename = downloadPlatform(cookies, version, "thin.osx", "dmg")
|
||||
when "postgres-win"
|
||||
path_filename = downloadPostgres(cookies, version, "x64", "zip")
|
||||
when "postgres-deb"
|
||||
path_filename = downloadPostgres(cookies, version, "amd64_deb", "tar.bz2")
|
||||
else
|
||||
throw new ExceptionDL1C("Bad target")
|
||||
;
|
||||
;
|
||||
|
||||
return path_filename
|
||||
when "platform-win64"
|
||||
path_filename = downloadPlatform(cookies, version, "windows64full", "rar")
|
||||
when "platform-win32"
|
||||
path_filename = downloadPlatform(cookies, version, "windows", "rar")
|
||||
when "platform-osx"
|
||||
path_filename = downloadPlatform(cookies, version, "clientosx", "dmg")
|
||||
when "platform-deb64"
|
||||
path_filename = downloadPlatform(cookies, version, "client", "tar.gz")
|
||||
when "server-win64"
|
||||
path_filename = downloadPlatform(cookies, version, "windows64", "rar")
|
||||
when "server-deb64"
|
||||
path_filename = downloadPlatform(cookies, version, "deb64", "tar.gz")
|
||||
when "thinclient-win64"
|
||||
path_filename = downloadPlatform(cookies, version, "setuptc64", "tar.gz")
|
||||
when "thinclient-win32"
|
||||
path_filename = downloadPlatform(cookies, version, "setuptc", "tar.gz")
|
||||
when "thinclient-osx"
|
||||
path_filename = downloadPlatform(cookies, version, "thin.osx", "dmg")
|
||||
when "postgres-win"
|
||||
path_filename = downloadPostgres(cookies, version, "x64", "zip")
|
||||
when "postgres-deb"
|
||||
path_filename = downloadPostgres(cookies, version, "amd64_deb", "tar.bz2")
|
||||
else
|
||||
throw new ExceptionDL1C("Bad target")
|
||||
;
|
||||
;
|
||||
|
||||
return path_filename
|
||||
;
|
||||
|
||||
method Script(username: String, password: String, target: String, version: String): Number
|
||||
|
||||
try
|
||||
main(username, password, target, version)
|
||||
return 0
|
||||
catch exception: any
|
||||
Console.WriteError(exception.Info())
|
||||
return 1
|
||||
;
|
||||
try
|
||||
main(username, password, target, version)
|
||||
return 0
|
||||
catch exception: any
|
||||
Console.WriteError(exception.Info())
|
||||
return 1
|
||||
;
|
||||
;
|
||||
@@ -16,102 +16,102 @@
|
||||
*/
|
||||
|
||||
метод ВыполнитьСкрипт(имяФайлаСкрипта: Строка, имяКомандыСкрипта: Строка, параметрыСкрипта: Массив): ПотокЧтения
|
||||
пер расширениеИсполнителя: Строка
|
||||
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
|
||||
выбор когда имяОС.НачинаетсяС("windows", Истина)
|
||||
расширениеИсполнителя = "cmd"
|
||||
иначе
|
||||
расширениеИсполнителя = "sh"
|
||||
;
|
||||
знч путьКИсполнителю = СредаИсполнения.ПолучитьСвойство("logback.configurationFile").Удалить("config" + Файлы
|
||||
.СимволРазделителя + "logback.xml") + "bin/executor_j11." + расширениеИсполнителя
|
||||
пер расширениеИсполнителя: Строка
|
||||
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
|
||||
выбор когда имяОС.НачинаетсяС("windows", Истина)
|
||||
расширениеИсполнителя = "cmd"
|
||||
иначе
|
||||
расширениеИсполнителя = "sh"
|
||||
;
|
||||
знч путьКИсполнителю = СредаИсполнения.ПолучитьСвойство("logback.configurationFile").Удалить("config" + Файлы.СимволРазделителя
|
||||
+ "logback.xml") + "bin/executor_j11." + расширениеИсполнителя
|
||||
|
||||
знч командаТекущегоСкрипта = СредаИсполнения.ПолучитьСвойство("sun.java.command")
|
||||
пер имяФайлаТекущегоСкрипта = командаТекущегоСкрипта.Подстрока(0, командаТекущегоСкрипта.Найти(".sbsl") + 5)
|
||||
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
|
||||
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
|
||||
знч файлТекущегоСкрипта = новый Файл(имяФайлаТекущегоСкрипта)
|
||||
пер путьТекущегоСкрипта = ""
|
||||
если файлТекущегоСкрипта.Каталог != Неопределено
|
||||
путьТекущегоСкрипта = файлТекущегоСкрипта.Каталог.Путь + Файлы.СимволРазделителя
|
||||
;
|
||||
знч командаТекущегоСкрипта = СредаИсполнения.ПолучитьСвойство("sun.java.command")
|
||||
пер имяФайлаТекущегоСкрипта = командаТекущегоСкрипта.Подстрока(0, командаТекущегоСкрипта.Найти(".sbsl") + 5)
|
||||
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
|
||||
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
|
||||
знч файлТекущегоСкрипта = новый Файл(имяФайлаТекущегоСкрипта)
|
||||
пер путьТекущегоСкрипта = ""
|
||||
если файлТекущегоСкрипта.Каталог != Неопределено
|
||||
путьТекущегоСкрипта = файлТекущегоСкрипта.Каталог.Путь + Файлы.СимволРазделителя
|
||||
;
|
||||
|
||||
пер аргументыПроцессаОс = ["-s", путьТекущегоСкрипта + имяФайлаСкрипта, "-m", имяКомандыСкрипта]
|
||||
если не параметрыСкрипта.Пусто()
|
||||
аргументыПроцессаОс.ДобавитьВсе(параметрыСкрипта)
|
||||
;
|
||||
пер аргументыПроцессаОс = ["-s", путьТекущегоСкрипта + имяФайлаСкрипта, "-m", имяКомандыСкрипта]
|
||||
если не параметрыСкрипта.Пусто()
|
||||
аргументыПроцессаОс.ДобавитьВсе(параметрыСкрипта)
|
||||
;
|
||||
|
||||
знч библиотека = новый ПроцессОс(путьКИсполнителю, аргументыПроцессаОс, Ложь)
|
||||
знч библиотека = новый ПроцессОс(путьКИсполнителю, аргументыПроцессаОс, Ложь)
|
||||
|
||||
библиотека.Запустить()
|
||||
библиотека.ОжидатьЗавершения()
|
||||
библиотека.Запустить()
|
||||
библиотека.ОжидатьЗавершения()
|
||||
|
||||
знч ошибкиВыполненияСкрипта = библиотека.ПолучитьПотокОшибок()
|
||||
знч текстОшибок = ошибкиВыполненияСкрипта.ПрочитатьКакТекст(КодировкаПотокаВыводаСкриптов())
|
||||
если не текстОшибок.Пусто()
|
||||
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибок)
|
||||
;
|
||||
знч ошибкиВыполненияСкрипта = библиотека.ПолучитьПотокОшибок()
|
||||
знч текстОшибок = ошибкиВыполненияСкрипта.ПрочитатьКакТекст(КодировкаПотокаВыводаСкриптов())
|
||||
если не текстОшибок.Пусто()
|
||||
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибок)
|
||||
;
|
||||
|
||||
возврат библиотека.ПотокВывода
|
||||
возврат библиотека.ПотокВывода
|
||||
;
|
||||
|
||||
метод КодировкаПотокаВыводаСкриптов(): Строка
|
||||
возврат СредаИсполнения.ПолучитьСвойство("file.encoding")
|
||||
возврат СредаИсполнения.ПолучитьСвойство("file.encoding")
|
||||
;
|
||||
|
||||
метод НастройкиПотокаВыводаСкриптов(): НастройкиЧтенияДанных
|
||||
пер настройкиПотокаВывода = новый НастройкиЧтенияДанных()
|
||||
настройкиПотокаВывода.Кодировка = КодировкаПотокаВыводаСкриптов()
|
||||
пер настройкиПотокаВывода = новый НастройкиЧтенияДанных()
|
||||
настройкиПотокаВывода.Кодировка = КодировкаПотокаВыводаСкриптов()
|
||||
|
||||
возврат настройкиПотокаВывода
|
||||
возврат настройкиПотокаВывода
|
||||
;
|
||||
|
||||
метод ОбъектИзПотокаВывода(потокВывода: ПотокЧтения): Строка|Массив|Соответствие
|
||||
пер массивСтрок: Массив
|
||||
пер массивСтрок: Массив
|
||||
|
||||
знч результатВыполненияСкрипта = новый ЧтениеДанных(потокВывода, НастройкиПотокаВыводаСкриптов())
|
||||
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
|
||||
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
|
||||
знч результатВыполненияСкрипта = новый ЧтениеДанных(потокВывода, НастройкиПотокаВыводаСкриптов())
|
||||
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
|
||||
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
|
||||
|
||||
если прочитаннаяСтрока.Пусто()
|
||||
продолжить
|
||||
;
|
||||
если прочитаннаяСтрока.Пусто()
|
||||
продолжить
|
||||
;
|
||||
|
||||
выбор прочитаннаяСтрока[0]
|
||||
когда "["
|
||||
знч результатМассивом = МассивИзСтроки(прочитаннаяСтрока)
|
||||
если результатМассивом.Размер() == 1
|
||||
массивСтрок.Добавить(результатМассивом[0])
|
||||
иначе
|
||||
возврат результатМассивом
|
||||
;
|
||||
когда "{"
|
||||
возврат СоответствиеИзСтроки(прочитаннаяСтрока)
|
||||
выбор прочитаннаяСтрока[0]
|
||||
когда "["
|
||||
знч результатМассивом = МассивИзСтроки(прочитаннаяСтрока)
|
||||
если результатМассивом.Размер() == 1
|
||||
массивСтрок.Добавить(результатМассивом[0])
|
||||
иначе
|
||||
возврат результатМассивом
|
||||
;
|
||||
когда "{"
|
||||
возврат СоответствиеИзСтроки(прочитаннаяСтрока)
|
||||
|
||||
иначе
|
||||
массивСтрок.Добавить(прочитаннаяСтрока)
|
||||
;
|
||||
;
|
||||
возврат массивСтрок
|
||||
иначе
|
||||
массивСтрок.Добавить(прочитаннаяСтрока)
|
||||
;
|
||||
;
|
||||
возврат массивСтрок
|
||||
;
|
||||
|
||||
метод МассивИзСтроки(строкаПотокаВывода: Строка): Массив
|
||||
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
|
||||
знч результатМассивом = результатСтрокой.Разделить(", ", Ложь)
|
||||
возврат результатМассивом
|
||||
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
|
||||
знч результатМассивом = результатСтрокой.Разделить(", ", Ложь)
|
||||
возврат результатМассивом
|
||||
;
|
||||
|
||||
метод СоответствиеИзСтроки(строкаПотокаВывода: Строка): Соответствие
|
||||
пер результатСоответствием: Соответствие
|
||||
пер результатСоответствием: Соответствие
|
||||
|
||||
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
|
||||
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
|
||||
|
||||
знч результатМассивом = результатСтрокой.Разделить(", ")
|
||||
для строкаРезультата из результатМассивом
|
||||
знч ключИЗначение = строкаРезультата.Разделить("=")
|
||||
знч результатМассивом = результатСтрокой.Разделить(", ")
|
||||
для строкаРезультата из результатМассивом
|
||||
знч ключИЗначение = строкаРезультата.Разделить("=")
|
||||
|
||||
результатСоответствием.Вставить(ключИЗначение[0], ключИЗначение[1])
|
||||
;
|
||||
результатСоответствием.Вставить(ключИЗначение[0], ключИЗначение[1])
|
||||
;
|
||||
|
||||
возврат результатСоответствием
|
||||
возврат результатСоответствием
|
||||
;
|
||||
@@ -12,163 +12,245 @@
|
||||
******************************************************************************/
|
||||
|
||||
метод УстановленныеПлатформы(): Соответствие
|
||||
пер установленныеПлатформы: Соответствие
|
||||
пер установленныеПлатформы: Соответствие
|
||||
|
||||
знч каталогиПлатформы = КаталогиПлатформы()
|
||||
знч каталогиПлатформы = КаталогиПлатформы()
|
||||
|
||||
знч настройкиПоискаФайлов = новый НастройкиПоискаФайлов()
|
||||
настройкиПоискаФайлов.ИсключитьФайлы(Истина)
|
||||
настройкиПоискаФайлов.МаксимальнаяГлубина(1)
|
||||
знч настройкиПоискаФайлов = новый НастройкиПоискаФайлов()
|
||||
настройкиПоискаФайлов.ИсключитьФайлы(Истина)
|
||||
настройкиПоискаФайлов.МаксимальнаяГлубина(1)
|
||||
|
||||
для каталогПлатформы из каталогиПлатформы
|
||||
знч найденныеФайлы = Файлы.Найти(каталогПлатформы, настройкиПоискаФайлов)
|
||||
для найденныйФайл из найденныеФайлы
|
||||
если не найденныйФайл.Имя.НачинаетсяС("8.3")
|
||||
продолжить
|
||||
;
|
||||
установленныеПлатформы.Вставить(найденныйФайл.Имя, найденныйФайл.Путь)
|
||||
;
|
||||
;
|
||||
для каталогПлатформы из каталогиПлатформы
|
||||
знч найденныеФайлы = Файлы.Найти(каталогПлатформы, настройкиПоискаФайлов)
|
||||
для найденныйФайл из найденныеФайлы
|
||||
если не найденныйФайл.Имя.НачинаетсяС("8.3")
|
||||
продолжить
|
||||
;
|
||||
установленныеПлатформы.Вставить(найденныйФайл.Имя, найденныйФайл.Путь)
|
||||
;
|
||||
;
|
||||
|
||||
возврат установленныеПлатформы
|
||||
возврат установленныеПлатформы
|
||||
;
|
||||
|
||||
метод МаксимальныеПлатформы(): Соответствие
|
||||
знч установленныеПлатформы = УстановленныеПлатформы()
|
||||
знч установленныеПлатформы = УстановленныеПлатформы()
|
||||
|
||||
пер максимальныеПлатформы: Соответствие
|
||||
пер максимальныеПлатформы: Соответствие
|
||||
|
||||
для платформа из установленныеПлатформы
|
||||
знч разложенныйТекущийРелиз = платформа.Ключ.Разделить(".")
|
||||
для платформа из установленныеПлатформы
|
||||
знч разложенныйТекущийРелиз = платформа.Ключ.Разделить(".")
|
||||
|
||||
пер релизБезВерсииМассивом = новый Массив(разложенныйТекущийРелиз)
|
||||
релизБезВерсииМассивом.УдалитьПоИндексу(3)
|
||||
пер релизБезВерсииМассивом = новый Массив(разложенныйТекущийРелиз)
|
||||
релизБезВерсииМассивом.УдалитьПоИндексу(3)
|
||||
|
||||
знч релизБезВерсии = Строки.Соединить(релизБезВерсииМассивом, ".")
|
||||
знч релизБезВерсии = Строки.Соединить(релизБезВерсииМассивом, ".")
|
||||
|
||||
если не максимальныеПлатформы.СодержитКлюч(релизБезВерсии)
|
||||
максимальныеПлатформы.Вставить(релизБезВерсии, платформа.Значение)
|
||||
продолжить
|
||||
;
|
||||
если не максимальныеПлатформы.СодержитКлюч(релизБезВерсии)
|
||||
максимальныеПлатформы.Вставить(релизБезВерсии, платформа.Значение)
|
||||
продолжить
|
||||
;
|
||||
|
||||
знч последнийРелиз = максимальныеПлатформы.Получить(релизБезВерсии)
|
||||
знч разложенныйПоследнийРелиз = последнийРелиз.Разделить(".")
|
||||
знч последнийРелиз = максимальныеПлатформы.Получить(релизБезВерсии)
|
||||
знч разложенныйПоследнийРелиз = последнийРелиз.Разделить(".")
|
||||
|
||||
если разложенныйТекущийРелиз[3] > разложенныйПоследнийРелиз[3]
|
||||
максимальныеПлатформы.Вставить(релизБезВерсии, платформа.Значение)
|
||||
;
|
||||
;
|
||||
если разложенныйТекущийРелиз[3] > разложенныйПоследнийРелиз[3]
|
||||
максимальныеПлатформы.Вставить(релизБезВерсии, платформа.Значение)
|
||||
;
|
||||
;
|
||||
|
||||
возврат максимальныеПлатформы
|
||||
возврат максимальныеПлатформы
|
||||
;
|
||||
|
||||
метод УстановитьПлатформу(имяДистрибутива: Строка, версияПлатформы: Строка): Булево
|
||||
знч используемаяОС = ИспользуемаяОС()
|
||||
знч используемаяОС = ИспользуемаяОС()
|
||||
|
||||
выбор используемаяОС
|
||||
когда ОперационныеСистемы.Windows
|
||||
выбросить новый ИсключениеНедопустимоеСостояние("Установка под Windows не поддерживается")
|
||||
когда ОперационныеСистемы.MacOS
|
||||
ВыполнитьКомандуСистемы("hdiutil", ["attach", имяДистрибутива])
|
||||
выбор используемаяОС
|
||||
когда ОперационныеСистемы.Windows
|
||||
знч имяВременногоКаталога = Файлы.СоздатьВременныйКаталог(, Ложь)
|
||||
|
||||
знч смонтированныйДиск = "/Volumes/1C Enterprise %версияПлатформы client for macOS/"
|
||||
ВыполнитьКомандуСистемы("C:/Program Files/7-Zip/7z", ["x", "-o%имяВременногоКаталога", имяДистрибутива])
|
||||
|
||||
ВыполнитьКомандуСистемы("installer", ["-pkg", "\"" + смонтированныйДиск + "1cv8-client-%версияПлатформы.pkg"
|
||||
+ "\"", "-target", "/opt"])
|
||||
ВыполнитьMsiExec(["/package", "\"%имяВременногоКаталога\\1CEnterprise 8 (x86-64).msi\""])
|
||||
|
||||
Файлы.Удалить(имяВременногоКаталога)
|
||||
|
||||
ВыполнитьКомандуСистемы("hdiutil", ["unmount", "\"" + смонтированныйДиск + "\""])
|
||||
когда ОперационныеСистемы.MacOS
|
||||
ВыполнитьКомандуСистемы("hdiutil", ["attach", имяДистрибутива])
|
||||
|
||||
когда ОперационныеСистемы.Linux
|
||||
выбросить новый ИсключениеНедопустимоеСостояние("Установка под Linux не поддерживается")
|
||||
;
|
||||
знч смонтированныйДиск = "/Volumes/1C Enterprise %версияПлатформы client for macOS/"
|
||||
|
||||
возврат Истина
|
||||
ВыполнитьКомандуСистемы("installer", ["-pkg", "\"%{смонтированныйДиск}1cv8-client-%версияПлатформы.pkg" + "\"",
|
||||
"-target", "/opt"])
|
||||
|
||||
ВыполнитьКомандуСистемы("hdiutil", ["unmount", "\"%смонтированныйДиск\""])
|
||||
|
||||
когда ОперационныеСистемы.Linux
|
||||
выбросить новый ИсключениеНедопустимоеСостояние("Установка под Linux не поддерживается")
|
||||
;
|
||||
|
||||
возврат Истина
|
||||
;
|
||||
|
||||
метод УдалитьПлатформу(версияПлатформы: Строка): Булево
|
||||
знч используемаяОС = ИспользуемаяОС()
|
||||
|
||||
выбор используемаяОС
|
||||
когда ОперационныеСистемы.Windows
|
||||
знч результат = ВыполнитьPowershell(["get-wmiobject", "Win32_Product", "-Filter", "'Name", "LIKE", "''\%(%версияПлатформы)'''"])
|
||||
|
||||
пер гуидУстановки = результат[0].Разделить(": ")[1]
|
||||
|
||||
ВыполнитьMsiExec(["/uninstall", "%гуидУстановки"])
|
||||
|
||||
когда ОперационныеСистемы.MacOS
|
||||
выбросить новый ИсключениеНедопустимоеСостояние("Удаление под MacOS не поддерживается")
|
||||
|
||||
когда ОперационныеСистемы.Linux
|
||||
выбросить новый ИсключениеНедопустимоеСостояние("Удаление под Linux не поддерживается")
|
||||
;
|
||||
|
||||
возврат Истина
|
||||
;
|
||||
|
||||
метод ВыполнитьКомандуСистемы(имяКоманды: Строка, параметры: Массив)
|
||||
знч команда = новый ПроцессОс(имяКоманды, параметры, Ложь)
|
||||
команда.Запустить()
|
||||
команда.ОжидатьЗавершения()
|
||||
знч команда = новый ПроцессОс(имяКоманды, параметры, Ложь)
|
||||
команда.Запустить()
|
||||
команда.ОжидатьЗавершения()
|
||||
|
||||
знч результатВыполненияСкрипта = новый ЧтениеДанных(команда.ПотокВывода, НастройкиПотокаВывода())
|
||||
пер списокРезультатов: Массив
|
||||
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
|
||||
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
|
||||
если прочитаннаяСтрока == ""
|
||||
продолжить
|
||||
;
|
||||
знч результатВыполненияСкрипта = новый ЧтениеДанных(команда.ПотокВывода, НастройкиПотокаВывода())
|
||||
пер списокРезультатов: Массив
|
||||
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
|
||||
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
|
||||
если прочитаннаяСтрока == ""
|
||||
продолжить
|
||||
;
|
||||
|
||||
списокРезультатов.Добавить(прочитаннаяСтрока)
|
||||
;
|
||||
если не списокРезультатов.Пусто()
|
||||
знч текстРезультатов = Строки.Соединить(списокРезультатов, "\в\н")
|
||||
Консоль.Записать(текстРезультатов)
|
||||
;
|
||||
списокРезультатов.Добавить(прочитаннаяСтрока)
|
||||
;
|
||||
если не списокРезультатов.Пусто()
|
||||
знч текстРезультатов = Строки.Соединить(списокРезультатов, "\в\н")
|
||||
Консоль.Записать(текстРезультатов)
|
||||
;
|
||||
|
||||
знч ошибкиВыполненияСкрипта = новый ЧтениеДанных(команда.ПотокОшибок, НастройкиПотокаВывода())
|
||||
пер списокОшибок: Массив
|
||||
пока не ошибкиВыполненияСкрипта.ЧтениеЗавершено()
|
||||
знч прочитаннаяСтрока = ошибкиВыполненияСкрипта.ПрочитатьСтроку()
|
||||
если прочитаннаяСтрока == ""
|
||||
продолжить
|
||||
;
|
||||
знч ошибкиВыполненияСкрипта = новый ЧтениеДанных(команда.ПотокОшибок, НастройкиПотокаВывода())
|
||||
пер списокОшибок: Массив
|
||||
пока не ошибкиВыполненияСкрипта.ЧтениеЗавершено()
|
||||
знч прочитаннаяСтрока = ошибкиВыполненияСкрипта.ПрочитатьСтроку()
|
||||
если прочитаннаяСтрока == ""
|
||||
продолжить
|
||||
;
|
||||
|
||||
списокОшибок.Добавить(прочитаннаяСтрока)
|
||||
;
|
||||
если не списокОшибок.Пусто()
|
||||
знч текстОшибки = Строки.Соединить(списокОшибок, "\в\н")
|
||||
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
|
||||
;
|
||||
списокОшибок.Добавить(прочитаннаяСтрока)
|
||||
;
|
||||
если не списокОшибок.Пусто()
|
||||
знч текстОшибки = Строки.Соединить(списокОшибок, "\в\н")
|
||||
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
|
||||
;
|
||||
;
|
||||
|
||||
метод ВыполнитьPowershell(параметры: Массив): Массив
|
||||
знч команда = новый ПроцессОс("powershell", параметры, Ложь)
|
||||
команда.Запустить()
|
||||
команда.ОжидатьЗавершения()
|
||||
|
||||
знч результатВыполненияСкрипта = новый ЧтениеДанных(команда.ПотокВывода, НастройкиПотокаВывода())
|
||||
пер списокРезультатов: Массив
|
||||
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
|
||||
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
|
||||
если прочитаннаяСтрока == ""
|
||||
продолжить
|
||||
;
|
||||
|
||||
списокРезультатов.Добавить(прочитаннаяСтрока)
|
||||
;
|
||||
|
||||
знч ошибкиВыполненияСкрипта = новый ЧтениеДанных(команда.ПотокОшибок, НастройкиПотокаВывода())
|
||||
пер списокОшибок: Массив
|
||||
пока не ошибкиВыполненияСкрипта.ЧтениеЗавершено()
|
||||
знч прочитаннаяСтрока = ошибкиВыполненияСкрипта.ПрочитатьСтроку()
|
||||
если прочитаннаяСтрока == ""
|
||||
продолжить
|
||||
;
|
||||
|
||||
списокОшибок.Добавить(прочитаннаяСтрока)
|
||||
;
|
||||
если не списокОшибок.Пусто()
|
||||
знч текстОшибки = Строки.Соединить(списокОшибок, "\в\н")
|
||||
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
|
||||
;
|
||||
|
||||
возврат списокРезультатов
|
||||
;
|
||||
|
||||
метод ВыполнитьMsiExec(параметры: Массив)
|
||||
знч временныйФайлЛога = Файлы.СоздатьВременныйФайл(, ".log")
|
||||
|
||||
параметры.Добавить("/quiet")
|
||||
параметры.Добавить("/norestart")
|
||||
параметры.Добавить("/Leo+")
|
||||
параметры.Добавить("\"%временныйФайлЛога\"")
|
||||
знч команда = новый ПроцессОс("msiexec", параметры, Ложь)
|
||||
команда.Запустить()
|
||||
команда.ОжидатьЗавершения()
|
||||
|
||||
пер списокОшибок = временныйФайлЛога.ОткрытьПотокЧтения().ПрочитатьКакТекст("UTF-16").Разделить("\в\н")
|
||||
списокОшибок.Удалить(списокОшибок.Последний())
|
||||
списокОшибок.Удалить(списокОшибок.Первый())
|
||||
если не списокОшибок.Пусто()
|
||||
знч текстОшибки = Строки.Соединить(списокОшибок, "\в\н")
|
||||
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
|
||||
;
|
||||
;
|
||||
|
||||
метод НастройкиПотокаВывода(): НастройкиЧтенияДанных
|
||||
пер настройкиПотокаВывода = новый НастройкиЧтенияДанных()
|
||||
настройкиПотокаВывода.Кодировка = СредаИсполнения.ПолучитьСвойство("file.encoding")
|
||||
пер настройкиПотокаВывода = новый НастройкиЧтенияДанных()
|
||||
настройкиПотокаВывода.Кодировка = СредаИсполнения.ПолучитьСвойство("file.encoding")
|
||||
|
||||
возврат настройкиПотокаВывода
|
||||
возврат настройкиПотокаВывода
|
||||
;
|
||||
|
||||
|
||||
перечисление ОперационныеСистемы
|
||||
Windows,
|
||||
MacOS,
|
||||
Linux
|
||||
Windows,
|
||||
MacOS,
|
||||
Linux
|
||||
;
|
||||
|
||||
|
||||
метод ИспользуемаяОС(): ОперационныеСистемы
|
||||
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
|
||||
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
|
||||
|
||||
выбор когда имяОС.НачинаетсяС("windows", Истина)
|
||||
возврат ОперационныеСистемы.Windows
|
||||
выбор когда имяОС.НачинаетсяС("windows", Истина)
|
||||
возврат ОперационныеСистемы.Windows
|
||||
|
||||
когда имяОС.Содержит("mac", Истина)
|
||||
возврат ОперационныеСистемы.MacOS
|
||||
когда имяОС.Содержит("mac", Истина)
|
||||
возврат ОперационныеСистемы.MacOS
|
||||
|
||||
когда имяОС.Содержит("nux", Истина)
|
||||
возврат ОперационныеСистемы.Linux
|
||||
когда имяОС.Содержит("nux", Истина)
|
||||
возврат ОперационныеСистемы.Linux
|
||||
|
||||
иначе
|
||||
выбросить новый ИсключениеНедопустимоеСостояние("Неизвестная ОС")
|
||||
;
|
||||
иначе
|
||||
выбросить новый ИсключениеНедопустимоеСостояние("Неизвестная ОС")
|
||||
;
|
||||
;
|
||||
|
||||
метод КаталогиПлатформы(): Массив
|
||||
пер списокКаталогов: Массив
|
||||
пер списокКаталогов: Массив
|
||||
|
||||
знч используемаяОС = ИспользуемаяОС()
|
||||
знч используемаяОС = ИспользуемаяОС()
|
||||
|
||||
выбор используемаяОС
|
||||
когда ОперационныеСистемы.Windows
|
||||
знч каталог32 = СредаИсполнения.ПолучитьПеременную("ProgramFiles(x86)")
|
||||
списокКаталогов.Добавить(каталог32 + "\\1Cv8")
|
||||
знч каталог64 = СредаИсполнения.ПолучитьПеременную("ProgramFiles")
|
||||
списокКаталогов.Добавить(каталог64 + "\\1Cv8")
|
||||
когда ОперационныеСистемы.MacOS
|
||||
списокКаталогов.Добавить("/opt/1Cv8")
|
||||
когда ОперационныеСистемы.Linux
|
||||
списокКаталогов.Добавить("/opt/1C/v8.3/x86_64")
|
||||
;
|
||||
выбор используемаяОС
|
||||
когда ОперационныеСистемы.Windows
|
||||
знч каталог32 = СредаИсполнения.ПолучитьПеременную("ProgramFiles(x86)")
|
||||
списокКаталогов.Добавить(каталог32 + "\\1Cv8")
|
||||
знч каталог64 = СредаИсполнения.ПолучитьПеременную("ProgramFiles")
|
||||
списокКаталогов.Добавить(каталог64 + "\\1Cv8")
|
||||
когда ОперационныеСистемы.MacOS
|
||||
списокКаталогов.Добавить("/opt/1Cv8")
|
||||
когда ОперационныеСистемы.Linux
|
||||
списокКаталогов.Добавить("/opt/1C/v8.3/x86_64")
|
||||
;
|
||||
|
||||
возврат списокКаталогов
|
||||
возврат списокКаталогов
|
||||
;
|
||||
+207
-180
@@ -13,251 +13,278 @@
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
конст ИСПОЛЬЗУЕМЫЕ_ВЕРСИИ_ПЛАТФОРМЫ = ["10", "12", "14", "15", "16", "17"]
|
||||
конст ИСПОЛЬЗУЕМЫЕ_ВЕРСИИ_ПЛАТФОРМЫ = ["10", "12", "14", "15", "16", "17", "18"]
|
||||
|
||||
|
||||
метод Скрипт()
|
||||
знч имяПользователя = Консоль.СчитатьСтроку("Имя пользователя: ")
|
||||
знч парольПользователя = Консоль.СчитатьСтроку("Пароль пользователя: ")
|
||||
знч имяПользователя = Консоль.СчитатьСтроку("Имя пользователя: ")
|
||||
знч парольПользователя = Консоль.СчитатьСтроку("Пароль пользователя: ")
|
||||
|
||||
ОбновитьПлатформы(имяПользователя, парольПользователя)
|
||||
ОбновитьПлатформы(имяПользователя, парольПользователя, Истина)
|
||||
;
|
||||
|
||||
метод ОбновитьПлатформы(имяПользователя: Строка, парольПользователя: Строка)
|
||||
знч используемыеВерсииПлатформы = ИспользуемыеВерсииПлатформы()
|
||||
метод ОбновитьПлатформы(имяПользователя: Строка, парольПользователя: Строка, подтвердитьУстановку: Булево)
|
||||
знч используемыеВерсииПлатформы = ИспользуемыеВерсииПлатформы()
|
||||
|
||||
знч установленныеВерсииПлатформы = УстановленныеВерсииПлатформы()
|
||||
знч установленныеВерсииПлатформы = УстановленныеВерсииПлатформы()
|
||||
|
||||
знч последниеВерсииПлатформы = ПоследниеВерсииПлатформы(имяПользователя, парольПользователя)
|
||||
знч последниеВерсииПлатформы = ПоследниеВерсииПлатформы(имяПользователя, парольПользователя)
|
||||
|
||||
пер лишниеВерсииПлатформы: Множество
|
||||
лишниеВерсииПлатформы.ДобавитьВсе(установленныеВерсииПлатформы)
|
||||
лишниеВерсииПлатформы.УдалитьВсе(используемыеВерсииПлатформы)
|
||||
лишниеВерсииПлатформы.УдалитьВсе(последниеВерсииПлатформы)
|
||||
пер лишниеВерсииПлатформы: Множество
|
||||
лишниеВерсииПлатформы.ДобавитьВсе(установленныеВерсииПлатформы)
|
||||
лишниеВерсииПлатформы.УдалитьВсе(используемыеВерсииПлатформы)
|
||||
лишниеВерсииПлатформы.УдалитьВсе(последниеВерсииПлатформы)
|
||||
|
||||
пер новыеВерсииПлатформы: Множество
|
||||
новыеВерсииПлатформы.ДобавитьВсе(используемыеВерсииПлатформы)
|
||||
новыеВерсииПлатформы.ДобавитьВсе(последниеВерсииПлатформы)
|
||||
новыеВерсииПлатформы.УдалитьВсе(установленныеВерсииПлатформы)
|
||||
пер новыеВерсииПлатформы: Множество
|
||||
новыеВерсииПлатформы.ДобавитьВсе(используемыеВерсииПлатформы)
|
||||
новыеВерсииПлатформы.ДобавитьВсе(последниеВерсииПлатформы)
|
||||
новыеВерсииПлатформы.УдалитьВсе(установленныеВерсииПлатформы)
|
||||
|
||||
знч новыеВерсииПлатформыМассивом = новый Массив(новыеВерсииПлатформы)
|
||||
Массив.Сортировать(новыеВерсииПлатформыМассивом)
|
||||
для версияПлатформы из новыеВерсииПлатформыМассивом
|
||||
Консоль.Записать("Необходимо установить платформу %версияПлатформы")
|
||||
;
|
||||
знч новыеВерсииПлатформыМассивом = новый Массив(новыеВерсииПлатформы)
|
||||
Массив.Сортировать(новыеВерсииПлатформыМассивом)
|
||||
для версияПлатформы из новыеВерсииПлатформыМассивом
|
||||
Консоль.Записать("Необходимо установить платформу %версияПлатформы")
|
||||
;
|
||||
|
||||
знч лишниеВерсииПлатформыМассивом = новый Массив(лишниеВерсииПлатформы)
|
||||
Массив.Сортировать(лишниеВерсииПлатформыМассивом)
|
||||
для версияПлатформы из лишниеВерсииПлатформыМассивом
|
||||
Консоль.Записать("Необходимо удалить платформу %версияПлатформы")
|
||||
;
|
||||
|
||||
знч установить = Консоль.СчитатьБулево("Выполнить обновление платформ?")
|
||||
если не установить
|
||||
возврат
|
||||
;
|
||||
|
||||
для версияПлатформы из новыеВерсииПлатформыМассивом
|
||||
Консоль.Записать("Скачиваю платформу %версияПлатформы")
|
||||
знч имяДистрибутива = СкачатьПлатформу(версияПлатформы, имяПользователя, парольПользователя)
|
||||
если имяДистрибутива == ""
|
||||
прервать
|
||||
;
|
||||
Консоль.Записать("Устанавливаю платформу %версияПлатформы")
|
||||
УстановитьПлатформу(имяДистрибутива, версияПлатформы)
|
||||
Файлы.Удалить(имяДистрибутива)
|
||||
;
|
||||
знч лишниеВерсииПлатформыМассивом = новый Массив(лишниеВерсииПлатформы)
|
||||
Массив.Сортировать(лишниеВерсииПлатформыМассивом)
|
||||
для версияПлатформы из лишниеВерсииПлатформыМассивом
|
||||
Консоль.Записать("Необходимо удалить платформу %версияПлатформы")
|
||||
;
|
||||
|
||||
пер установить = Истина
|
||||
если подтвердитьУстановку
|
||||
установить = Консоль.СчитатьБулево("Выполнить обновление платформ?")
|
||||
;
|
||||
если не установить
|
||||
возврат
|
||||
;
|
||||
|
||||
для версияПлатформы из новыеВерсииПлатформыМассивом
|
||||
Консоль.Записать("Скачиваю платформу %версияПлатформы")
|
||||
знч имяДистрибутива = СкачатьПлатформу(версияПлатформы, имяПользователя, парольПользователя)
|
||||
если имяДистрибутива == ""
|
||||
прервать
|
||||
;
|
||||
Консоль.Записать("Устанавливаю платформу %версияПлатформы")
|
||||
УстановитьПлатформу(имяДистрибутива, версияПлатформы)
|
||||
Файлы.Удалить(имяДистрибутива)
|
||||
;
|
||||
|
||||
для версияПлатформы из лишниеВерсииПлатформыМассивом
|
||||
Консоль.Записать("Удаляю платформу %версияПлатформы")
|
||||
УдалитьПлатформу(версияПлатформы)
|
||||
;
|
||||
;
|
||||
|
||||
метод ИспользуемыеВерсииПлатформы(): Множество
|
||||
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/СписокИнформационныхБаз.sbsl", "ИспользуемыеВерсии", [])
|
||||
знч версииПлатформы = ОбъектИзПотокаВывода(потокВывода) как Массив
|
||||
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/СписокИнформационныхБаз.sbsl", "ИспользуемыеВерсии", [])
|
||||
знч версииПлатформы = ОбъектИзПотокаВывода(потокВывода) как Массив
|
||||
|
||||
пер используемыеВерсииПлатформы: Множество
|
||||
для версияПлатформы из версииПлатформы
|
||||
знч версияМассивом = версияПлатформы.Разделить("|")
|
||||
|
||||
Консоль.Записать("База " + версияМассивом[0] + " использует версию " + версияМассивом[1])
|
||||
используемыеВерсииПлатформы.Добавить(версияМассивом[1])
|
||||
;
|
||||
пер используемыеВерсииПлатформы: Множество
|
||||
для версияПлатформы из версииПлатформы
|
||||
знч версияМассивом = версияПлатформы.Разделить("|")
|
||||
|
||||
возврат используемыеВерсииПлатформы
|
||||
Консоль.Записать("База " + версияМассивом[0] + " использует версию " + версияМассивом[1])
|
||||
используемыеВерсииПлатформы.Добавить(версияМассивом[1])
|
||||
;
|
||||
|
||||
возврат используемыеВерсииПлатформы
|
||||
;
|
||||
|
||||
метод УстановленныеВерсииПлатформы(): Множество
|
||||
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/УстановленныеПлатформы83.sbsl", "УстановленныеПлатформы", [])
|
||||
знч версииПлатформы = ОбъектИзПотокаВывода(потокВывода) как Массив
|
||||
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/УстановленныеПлатформы83.sbsl", "УстановленныеПлатформы", [])
|
||||
знч версииПлатформы = ОбъектИзПотокаВывода(потокВывода) как Соответствие
|
||||
|
||||
пер установленныеВерсииПлатформы: Множество
|
||||
для версияПлатформы из версииПлатформы
|
||||
установленныеВерсииПлатформы.Добавить(версияПлатформы.Подстрока(0, версияПлатформы.Найти("|")))
|
||||
;
|
||||
пер установленныеВерсииПлатформы: Множество
|
||||
для версияПлатформы из версииПлатформы
|
||||
установленныеВерсииПлатформы.Добавить(версияПлатформы.Ключ)
|
||||
;
|
||||
|
||||
возврат установленныеВерсииПлатформы
|
||||
возврат установленныеВерсииПлатформы
|
||||
;
|
||||
|
||||
метод ПоследниеВерсииПлатформы(имяПользователя: Строка, парольПользователя: Строка): Множество
|
||||
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/ОпубликованныеПлатформы83.sbsl", "ПоследниеРелизы", [имяПользователя,
|
||||
парольПользователя])
|
||||
знч версииПлатформы = ОбъектИзПотокаВывода(потокВывода) как Массив
|
||||
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/ОпубликованныеПлатформы83.sbsl", "ПоследниеРелизы", [имяПользователя,
|
||||
парольПользователя])
|
||||
знч версииПлатформы = ОбъектИзПотокаВывода(потокВывода) как Массив
|
||||
|
||||
пер последниеВерсииПлатформы: Множество
|
||||
знч результатВыполненияСкрипта = новый ЧтениеДанных(потокВывода)
|
||||
для версияПлатформы из версииПлатформы
|
||||
знч разложеннаяВерсияПлатформы = версияПлатформы.Разделить(".")
|
||||
пер последниеВерсииПлатформы: Множество
|
||||
знч результатВыполненияСкрипта = новый ЧтениеДанных(потокВывода)
|
||||
для версияПлатформы из версииПлатформы
|
||||
знч разложеннаяВерсияПлатформы = версияПлатформы.Разделить(".")
|
||||
|
||||
если не ИСПОЛЬЗУЕМЫЕ_ВЕРСИИ_ПЛАТФОРМЫ.Содержит(разложеннаяВерсияПлатформы[2])
|
||||
продолжить
|
||||
;
|
||||
если не ИСПОЛЬЗУЕМЫЕ_ВЕРСИИ_ПЛАТФОРМЫ.Содержит(разложеннаяВерсияПлатформы[2])
|
||||
продолжить
|
||||
;
|
||||
|
||||
последниеВерсииПлатформы.Добавить(версияПлатформы)
|
||||
;
|
||||
последниеВерсииПлатформы.Добавить(версияПлатформы)
|
||||
;
|
||||
|
||||
возврат последниеВерсииПлатформы
|
||||
возврат последниеВерсииПлатформы
|
||||
;
|
||||
|
||||
метод СкачатьПлатформу(версияПлатформы: Строка, имяПользователя: Строка, парольПользователя: Строка): Строка
|
||||
знч используемаяОС = ИспользуемаяОС()
|
||||
|
||||
пер целеваяПлатформа: Строка
|
||||
выбор используемаяОС
|
||||
когда ОперационныеСистемы.Windows
|
||||
целеваяПлатформа = "platform-win64"
|
||||
когда ОперационныеСистемы.MacOS
|
||||
целеваяПлатформа = "platform-osx"
|
||||
когда ОперационныеСистемы.Linux
|
||||
целеваяПлатформа = "platform-deb64"
|
||||
;
|
||||
знч используемаяОС = ИспользуемаяОС()
|
||||
|
||||
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/dl-1c.sbsl", "main", [имяПользователя,
|
||||
парольПользователя, целеваяПлатформа, версияПлатформы])
|
||||
знч имяДистрибутива = ОбъектИзПотокаВывода(потокВывода) как Строка
|
||||
пер целеваяПлатформа: Строка
|
||||
выбор используемаяОС
|
||||
когда ОперационныеСистемы.Windows
|
||||
целеваяПлатформа = "platform-win64"
|
||||
когда ОперационныеСистемы.MacOS
|
||||
целеваяПлатформа = "platform-osx"
|
||||
когда ОперационныеСистемы.Linux
|
||||
целеваяПлатформа = "platform-deb64"
|
||||
;
|
||||
|
||||
возврат имяДистрибутива
|
||||
знч потокВывода = ВыполнитьСкрипт("../Библиотеки/dl-1c.sbsl", "main", [имяПользователя, парольПользователя, целеваяПлатформа,
|
||||
версияПлатформы])
|
||||
знч имяДистрибутива = ОбъектИзПотокаВывода(потокВывода) как Строка
|
||||
|
||||
возврат имяДистрибутива
|
||||
;
|
||||
|
||||
метод УстановитьПлатформу(имяДистрибутива: Строка, версияПлатформы: Строка): Булево
|
||||
знч используемаяОС = ИспользуемаяОС()
|
||||
|
||||
ВыполнитьСкрипт("../Библиотеки/УстановленныеПлатформы83.sbsl", "УстановитьПлатформу", [имяДистрибутива, версияПлатформы])
|
||||
|
||||
возврат Истина
|
||||
знч используемаяОС = ИспользуемаяОС()
|
||||
|
||||
ВыполнитьСкрипт("../Библиотеки/УстановленныеПлатформы83.sbsl", "УстановитьПлатформу", [имяДистрибутива, версияПлатформы])
|
||||
|
||||
возврат Истина
|
||||
;
|
||||
|
||||
метод УдалитьПлатформу(версияПлатформы: Строка): Булево
|
||||
знч используемаяОС = ИспользуемаяОС()
|
||||
|
||||
ВыполнитьСкрипт("../Библиотеки/УстановленныеПлатформы83.sbsl", "УдалитьПлатформу", [версияПлатформы])
|
||||
|
||||
возврат Истина
|
||||
;
|
||||
|
||||
|
||||
перечисление ОперационныеСистемы
|
||||
Windows,
|
||||
MacOS,
|
||||
Linux
|
||||
Windows,
|
||||
MacOS,
|
||||
Linux
|
||||
;
|
||||
|
||||
|
||||
метод ИспользуемаяОС(): ОперационныеСистемы
|
||||
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
|
||||
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
|
||||
|
||||
выбор
|
||||
когда имяОС.НачинаетсяС("windows", Истина)
|
||||
возврат ОперационныеСистемы.Windows
|
||||
выбор когда имяОС.НачинаетсяС("windows", Истина)
|
||||
возврат ОперационныеСистемы.Windows
|
||||
|
||||
когда имяОС.Содержит("mac", Истина)
|
||||
возврат ОперационныеСистемы.MacOS
|
||||
когда имяОС.Содержит("mac", Истина)
|
||||
возврат ОперационныеСистемы.MacOS
|
||||
|
||||
когда имяОС.Содержит("nux", Истина)
|
||||
возврат ОперационныеСистемы.Linux
|
||||
когда имяОС.Содержит("nux", Истина)
|
||||
возврат ОперационныеСистемы.Linux
|
||||
|
||||
иначе
|
||||
выбросить новый ИсключениеНедопустимоеСостояние("Неизвестная ОС")
|
||||
;
|
||||
иначе
|
||||
выбросить новый ИсключениеНедопустимоеСостояние("Неизвестная ОС")
|
||||
;
|
||||
;
|
||||
|
||||
/*
|
||||
* Методы для вызова других скриптов. Необходимо копировать в свой скрипт
|
||||
*/
|
||||
|
||||
метод ВыполнитьСкрипт(имяФайлаСкрипта: Строка, имяКомандыСкрипта: Строка, параметрыСкрипта: Массив): ПотокЧтения
|
||||
пер расширениеИсполнителя: Строка
|
||||
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
|
||||
выбор
|
||||
когда имяОС.НачинаетсяС("windows", Истина)
|
||||
расширениеИсполнителя = "cmd"
|
||||
иначе
|
||||
расширениеИсполнителя = "sh"
|
||||
;
|
||||
знч путьКИсполнителю = СредаИсполнения.ПолучитьСвойство("logback.configurationFile").Удалить("config" + Файлы.СимволРазделителя
|
||||
+ "logback.xml") + "bin/executor_j11." + расширениеИсполнителя
|
||||
пер расширениеИсполнителя: Строка
|
||||
знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
|
||||
выбор когда имяОС.НачинаетсяС("windows", Истина)
|
||||
расширениеИсполнителя = "cmd"
|
||||
иначе
|
||||
расширениеИсполнителя = "sh"
|
||||
;
|
||||
знч путьКИсполнителю = СредаИсполнения.ПолучитьСвойство("logback.configurationFile").Удалить("config" + Файлы.СимволРазделителя
|
||||
+ "logback.xml") + "bin/executor_j11." + расширениеИсполнителя
|
||||
|
||||
знч командаТекущегоСкрипта = СредаИсполнения.ПолучитьСвойство("sun.java.command")
|
||||
пер имяФайлаТекущегоСкрипта = командаТекущегоСкрипта.Подстрока(0, командаТекущегоСкрипта.Найти(".sbsl") + 5)
|
||||
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
|
||||
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
|
||||
знч файлТекущегоСкрипта = новый Файл(имяФайлаТекущегоСкрипта)
|
||||
пер путьТекущегоСкрипта = ""
|
||||
если файлТекущегоСкрипта.Каталог != Неопределено
|
||||
путьТекущегоСкрипта = файлТекущегоСкрипта.Каталог.Путь + Файлы.СимволРазделителя
|
||||
;
|
||||
знч командаТекущегоСкрипта = СредаИсполнения.ПолучитьСвойство("sun.java.command")
|
||||
пер имяФайлаТекущегоСкрипта = командаТекущегоСкрипта.Подстрока(0, командаТекущегоСкрипта.Найти(".sbsl") + 5)
|
||||
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
|
||||
имяФайлаТекущегоСкрипта = имяФайлаТекущегоСкрипта.Подстрока(имяФайлаТекущегоСкрипта.Найти(" ") + 1)
|
||||
знч файлТекущегоСкрипта = новый Файл(имяФайлаТекущегоСкрипта)
|
||||
пер путьТекущегоСкрипта = ""
|
||||
если файлТекущегоСкрипта.Каталог != Неопределено
|
||||
путьТекущегоСкрипта = файлТекущегоСкрипта.Каталог.Путь + Файлы.СимволРазделителя
|
||||
;
|
||||
|
||||
пер аргументыПроцессаОс = ["-s", путьТекущегоСкрипта + имяФайлаСкрипта, "-m", имяКомандыСкрипта]
|
||||
если не параметрыСкрипта.Пусто()
|
||||
аргументыПроцессаОс.ДобавитьВсе(параметрыСкрипта)
|
||||
;
|
||||
пер аргументыПроцессаОс = ["-s", путьТекущегоСкрипта + имяФайлаСкрипта, "-m", имяКомандыСкрипта]
|
||||
если не параметрыСкрипта.Пусто()
|
||||
аргументыПроцессаОс.ДобавитьВсе(параметрыСкрипта)
|
||||
;
|
||||
|
||||
знч библиотека = новый ПроцессОс(путьКИсполнителю, аргументыПроцессаОс, Ложь)
|
||||
знч библиотека = новый ПроцессОс(путьКИсполнителю, аргументыПроцессаОс, Ложь)
|
||||
|
||||
библиотека.Запустить()
|
||||
библиотека.Запустить()
|
||||
библиотека.ОжидатьЗавершения()
|
||||
|
||||
знч ошибкиВыполненияСкрипта = новый ЧтениеДанных(библиотека.ПотокОшибок, НастройкиПотокаВывода())
|
||||
пер списокОшибок: Массив
|
||||
пока не ошибкиВыполненияСкрипта.ЧтениеЗавершено()
|
||||
знч прочитаннаяСтрока = ошибкиВыполненияСкрипта.ПрочитатьСтроку()
|
||||
если прочитаннаяСтрока == ""
|
||||
продолжить
|
||||
;
|
||||
знч ошибкиВыполненияСкрипта = библиотека.ПолучитьПотокОшибок()
|
||||
знч текстОшибок = ошибкиВыполненияСкрипта.ПрочитатьКакТекст(КодировкаПотокаВыводаСкриптов())
|
||||
если не текстОшибок.Пусто()
|
||||
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибок)
|
||||
;
|
||||
|
||||
списокОшибок.Добавить(прочитаннаяСтрока)
|
||||
;
|
||||
если не списокОшибок.Пусто()
|
||||
знч текстОшибки = Строки.Соединить(списокОшибок, "\в\н")
|
||||
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
|
||||
;
|
||||
|
||||
возврат библиотека.ПотокВывода
|
||||
возврат библиотека.ПотокВывода
|
||||
;
|
||||
|
||||
метод НастройкиПотокаВывода(): НастройкиЧтенияДанных
|
||||
пер настройкиПотокаВывода = новый НастройкиЧтенияДанных()
|
||||
настройкиПотокаВывода.Кодировка = СредаИсполнения.ПолучитьСвойство("file.encoding")
|
||||
|
||||
возврат настройкиПотокаВывода
|
||||
метод КодировкаПотокаВыводаСкриптов(): Строка
|
||||
возврат СредаИсполнения.ПолучитьСвойство("file.encoding")
|
||||
;
|
||||
|
||||
метод ОбъектИзПотокаВывода(потокВывода: ПотокЧтения): Строка|Массив
|
||||
пер результаты: Массив
|
||||
знч результатВыполненияСкрипта = новый ЧтениеДанных(потокВывода, НастройкиПотокаВывода())
|
||||
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
|
||||
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
|
||||
метод НастройкиПотокаВыводаСкриптов(): НастройкиЧтенияДанных
|
||||
пер настройкиПотокаВывода = новый НастройкиЧтенияДанных()
|
||||
настройкиПотокаВывода.Кодировка = КодировкаПотокаВыводаСкриптов()
|
||||
|
||||
если прочитаннаяСтрока == ""
|
||||
продолжить
|
||||
;
|
||||
|
||||
знч объект = ОбъектИзСтроки(прочитаннаяСтрока)
|
||||
|
||||
результаты.Добавить(объект)
|
||||
;
|
||||
|
||||
если результаты.Размер() == 1
|
||||
возврат результаты[0]
|
||||
;
|
||||
|
||||
возврат результаты
|
||||
возврат настройкиПотокаВывода
|
||||
;
|
||||
|
||||
метод ОбъектИзСтроки(строкаПотокаВывода: Строка): Строка|Массив
|
||||
выбор строкаПотокаВывода[0]
|
||||
когда "["
|
||||
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
|
||||
знч результатМассивом = результатСтрокой.Разделить(", ", Ложь)
|
||||
возврат результатМассивом
|
||||
метод ОбъектИзПотокаВывода(потокВывода: ПотокЧтения): Строка|Массив|Соответствие
|
||||
пер массивСтрок: Массив
|
||||
|
||||
иначе
|
||||
возврат строкаПотокаВывода
|
||||
;
|
||||
знч результатВыполненияСкрипта = новый ЧтениеДанных(потокВывода, НастройкиПотокаВыводаСкриптов())
|
||||
пока не результатВыполненияСкрипта.ЧтениеЗавершено()
|
||||
знч прочитаннаяСтрока = результатВыполненияСкрипта.ПрочитатьСтроку()
|
||||
|
||||
если прочитаннаяСтрока.Пусто()
|
||||
продолжить
|
||||
;
|
||||
|
||||
выбор прочитаннаяСтрока[0]
|
||||
когда "["
|
||||
знч результатМассивом = МассивИзСтроки(прочитаннаяСтрока)
|
||||
если результатМассивом.Размер() == 1
|
||||
массивСтрок.Добавить(результатМассивом[0])
|
||||
иначе
|
||||
возврат результатМассивом
|
||||
;
|
||||
когда "{"
|
||||
возврат СоответствиеИзСтроки(прочитаннаяСтрока)
|
||||
|
||||
иначе
|
||||
возврат прочитаннаяСтрока
|
||||
;
|
||||
;
|
||||
возврат массивСтрок
|
||||
;
|
||||
|
||||
метод МассивИзСтроки(строкаПотокаВывода: Строка): Массив
|
||||
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
|
||||
знч результатМассивом = результатСтрокой.Разделить(", ", Ложь)
|
||||
возврат результатМассивом
|
||||
;
|
||||
|
||||
метод СоответствиеИзСтроки(строкаПотокаВывода: Строка): Соответствие
|
||||
пер результатСоответствием: Соответствие
|
||||
|
||||
знч результатСтрокой = строкаПотокаВывода.Подстрока(1, строкаПотокаВывода.Длина() - 1)
|
||||
|
||||
знч результатМассивом = результатСтрокой.Разделить(", ")
|
||||
для строкаРезультата из результатМассивом
|
||||
знч ключИЗначение = строкаРезультата.Разделить("=")
|
||||
|
||||
результатСоответствием.Вставить(ключИЗначение[0], ключИЗначение[1])
|
||||
;
|
||||
|
||||
возврат результатСоответствием
|
||||
;
|
||||
Reference in New Issue
Block a user