├── .idea
├── compiler.xml
├── description.html
├── encodings.xml
├── gradle.xml
├── misc.xml
├── modules.xml
├── uiDesigner.xml
└── vcs.xml
├── LicDataExtractor.iml
├── README.md
├── src
└── sample
│ ├── Extractor.java
│ ├── Main.java
│ └── RegDataWriter.java
└── Достаем информацию из файла лицензии 1С.docx
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/.idea/description.html:
--------------------------------------------------------------------------------
1 | Simple JavaFX 2.0 application that includes simple .fxml file with attached controller and Main class to quick start. Artifact to build JavaFX application is provided.
2 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/uiDesigner.xml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/LicDataExtractor.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # LicDataExtractor
2 |
3 | Извлечение регистрационных данных клиента из файла программной лицензии 1С Предприятия.
4 |
5 | Утилита пишется по просьбе коллег.
6 |
7 | Назначение: извлечение регистрационных данных клиента из файла программной лицензии системы 1С Предприятия.
8 |
9 | Технология: Java, JavaFX.
10 |
11 | Описание механизма получения данных: http://gogprog.ru/rabota_s_licenziyami_i_klyuchami_1s/license-info-1c.html
12 |
13 | По сути, используется консольная утилита ring, распространяемая в составе дистрибутива платформы 1С: Предприятие.
14 |
15 | LicDataExtractor служит лишь оберткой над этой утилитой, добавляя следующие удобства:
16 |
17 | - нет необходимости использовать командную строку для получения данных;
18 | - регистрационные данные, извлеченные из файла лицензии, показываются в окне на экране, откуда могут быть скопированы;
19 | - регистрационные данные также сохраняются в текстовый файл рядом с файлом лицензии.
20 |
21 | Системные требования и ограничения:
22 |
23 | - для работы утилиты необходим установленный JRE 1.8 или выше.
24 | - рекомендуется создать временную папку, куда нужно скопировать исследуемый файл лицензии. В папке одновременно может находиться только
25 | один файл лицензии. Возможно, в будущем это ограничение будет устранено, но пока так.
26 |
27 | Замеченные проблемы:
28 |
29 | - путь к папке не должен содержать пробелов. Если путь содержит пробелы, LicDataExtractor выведет ошибку, хотя сам файл лицензии корректен. Будет исправлено в следующих релизах.
30 |
31 | Подготовка к работе:
32 |
33 | - выполнить инструкции из статьи http://gogprog.ru/rabota_s_licenziyami_i_klyuchami_1s/license-info-1c.html (шаги 1-4);
34 | - создать временные папки на диске, куда скопировать файлы программных лицензий. В каждой папке должен быть один файл лицензии.
35 | - запустить LicDataExtractor, нажать на кнопку выбора директории и выбрать папку со скопированным файлом лицензии.
36 |
37 | Статус: релиз 1.02.
38 |
39 | Отказ от ответственности: утилита предоставляется "как есть", автор не несет ответственности за любые проблемы, связанные
40 | с ее использованием. Хотя и не может такие проблемы себе представить.
41 |
42 | Утилита разрабатывается в свободное время, любые замечания и пожелания будут с вниманием/благодарностью выслушаны/прочитаны,
43 | но не факт, что к чему-то приведут.
44 |
45 | Замечания и пожелания пишите на адрес: miller777@mail.ru
46 |
47 | Downloads: https://github.com/miller7777777/LicDataExtractor/releases/latest
48 |
--------------------------------------------------------------------------------
/src/sample/Extractor.java:
--------------------------------------------------------------------------------
1 | package sample;
2 |
3 | import java.io.BufferedReader;
4 | import java.io.File;
5 | import java.io.IOException;
6 | import java.io.InputStreamReader;
7 | import java.util.ArrayList;
8 | import java.util.List;
9 |
10 | public class Extractor {
11 |
12 | private String fullDirectoryName;
13 | private String pinCode = null;
14 | private String regNumber = null;
15 | private String result;
16 | private String licFileName;
17 | private List regDataList = new ArrayList();
18 |
19 |
20 | public Extractor(String fullDirectoryName) {
21 | this.fullDirectoryName = fullDirectoryName;
22 | extract(fullDirectoryName);
23 | }
24 |
25 | private void extract(String fullDirectoryName) {
26 |
27 | List results = new ArrayList();
28 | File folder = new File(fullDirectoryName);
29 | File[] listOfFiles = folder.listFiles();
30 |
31 | for (File file : listOfFiles) {
32 | if (file.isFile() && file.getName().endsWith(".lic")) {
33 | (results).add(file.getName());
34 | }
35 | }
36 |
37 | switch (results.size()) {
38 | case 0:
39 | result = "В директории отсутствуют файлы программных лицензий.";
40 | break;
41 | case 1:
42 | licFileName = results.get(0);
43 | extract(fullDirectoryName, results);
44 | break;
45 | default:
46 | result = "В директории должен быть только один файл \nпрограммной лицензии. \n\nОбнаружено файлов программных лицензий: " + results.size();
47 | break;
48 | }
49 | }
50 |
51 | private void extract(String fullDirectoryName, List results) {
52 |
53 | getPinRegNumber(fullDirectoryName, licFileName);
54 | getRegDataInfo(fullDirectoryName, pinCode, regNumber);
55 | }
56 |
57 | private void getRegDataInfo(String fullDirectoryName, String pinCode, String regNumber) {
58 |
59 | try {
60 | String argument = "ring.cmd license info --name " + pinCode + "-" + regNumber + " --path " + fullDirectoryName;
61 |
62 | Process proc = Runtime.getRuntime().exec(argument);
63 | BufferedReader stdInput = new BufferedReader(new
64 | InputStreamReader(proc.getInputStream(), "windows-1251"));
65 |
66 | BufferedReader stdError = new BufferedReader(new
67 | InputStreamReader(proc.getErrorStream()));
68 |
69 | // read the output from the command
70 | System.out.println("Here is the standard output of the command:\n");
71 |
72 | String s = null;
73 | while ((s = stdInput.readLine()) != null) {
74 | System.out.println(s);
75 | regDataList.add(s);
76 |
77 | }
78 |
79 | // read any errors from the attempted command
80 | System.out.println("Here is the standard error of the command (if any):\n");
81 | while ((s = stdError.readLine()) != null) {
82 | System.out.println(s);
83 | }
84 |
85 | proc.waitFor();
86 | proc.destroy();
87 |
88 | } catch (Exception e) {
89 | e.printStackTrace();
90 | }
91 |
92 | formResult();
93 | }
94 |
95 | private void getPinRegNumber(String fullDirectoryName, String licFileName) {
96 | try {
97 | String argument = "ring.cmd license list --path " + fullDirectoryName;
98 |
99 | Process proc = Runtime.getRuntime().exec(argument);
100 | BufferedReader stdInput = new BufferedReader(new
101 | InputStreamReader(proc.getInputStream()));
102 |
103 | BufferedReader stdError = new BufferedReader(new
104 | InputStreamReader(proc.getErrorStream()));
105 |
106 | // read the output from the command
107 | System.out.println("Here is the standard output of the command:\n");
108 | String s = null;
109 | if ((s = stdInput.readLine()) != null) {
110 | System.out.println(s);
111 | String pinReg[] = s.split("-");
112 | pinCode = pinReg[0];
113 | regNumber = pinReg[1];
114 | }
115 |
116 | // read any errors from the attempted command
117 | System.out.println("Here is the standard error of the command (if any):\n");
118 | while ((s = stdError.readLine()) != null) {
119 | System.out.println(s);
120 | }
121 |
122 | proc.waitFor();
123 | proc.destroy();
124 | } catch (IOException e) {
125 | e.printStackTrace();
126 | } catch (InterruptedException e) {
127 | e.printStackTrace();
128 | }
129 |
130 | }
131 |
132 | private void formResult() {
133 | StringBuilder sb = new StringBuilder();
134 | sb.append("Файл: " + licFileName + "\r\n");
135 | sb.append("Пин-код: " + pinCode + "\r\n");
136 | sb.append("Рег.номер: " + regNumber + "\r\n");
137 |
138 | for (int i = 0; i < regDataList.size(); i++) {
139 | sb.append(regDataList.get(i) + "\r\n");
140 | }
141 | result = sb.toString();
142 | }
143 |
144 | public String getResult() {
145 |
146 | return result;
147 | }
148 |
149 | public String getLicFileName() {
150 | return licFileName;
151 | }
152 | }
153 |
--------------------------------------------------------------------------------
/src/sample/Main.java:
--------------------------------------------------------------------------------
1 | package sample;
2 |
3 | import java.io.File;
4 |
5 | import javafx.application.Application;
6 | import javafx.event.ActionEvent;
7 | import javafx.event.EventHandler;
8 | import javafx.fxml.FXMLLoader;
9 | import javafx.geometry.Insets;
10 | import javafx.scene.Parent;
11 | import javafx.scene.Scene;
12 | import javafx.scene.control.Button;
13 | import javafx.scene.control.TextArea;
14 | import javafx.scene.layout.VBox;
15 | import javafx.stage.DirectoryChooser;
16 | import javafx.stage.Stage;
17 |
18 | import java.awt.*;
19 |
20 | public class Main extends Application {
21 |
22 | public static final String WINDOW_TITLE = "LicDataExtractor version. 1.02";
23 | public static final String BUTTON_LABLE = "Выбор папки";
24 | private File dir = null;
25 | private String licFileName;
26 |
27 | @Override
28 | public void start(final Stage primaryStage) throws Exception {
29 |
30 | final DirectoryChooser directoryChooser = new DirectoryChooser();
31 | configuringDirectoryChooser(directoryChooser);
32 |
33 | final TextArea textArea = new TextArea();
34 | textArea.setMinHeight(70);
35 | Button button = new Button(BUTTON_LABLE);
36 |
37 | button.setOnAction(new EventHandler() {
38 | @Override
39 | public void handle(ActionEvent event) {
40 | textArea.setText("Ждите...");
41 | configuringDirectoryChooser(directoryChooser);
42 | dir = directoryChooser.showDialog(primaryStage);
43 |
44 | if (dir != null) {
45 | Extractor extractor = new Extractor(dir.getAbsolutePath());
46 | String regInfo = extractor.getResult();
47 |
48 | if (regInfo.startsWith("Файл: ")) {
49 | RegDataWriter writer = new RegDataWriter(dir.getAbsolutePath(), regInfo);
50 | writer.saveToFile(extractor.getLicFileName());
51 | }
52 |
53 | textArea.setText(dir.getAbsolutePath() + "\n" + regInfo);
54 | } else {
55 | textArea.setText(null);
56 | }
57 | }
58 | });
59 |
60 | VBox root = new VBox();
61 | root.setPadding(new Insets(10));
62 | root.setSpacing(5);
63 | root.getChildren().addAll(textArea, button);
64 |
65 | Scene scene = new Scene(root, 400, 200);
66 |
67 | primaryStage.setTitle(WINDOW_TITLE);
68 | primaryStage.setScene(scene);
69 | primaryStage.show();
70 | }
71 |
72 | private void configuringDirectoryChooser(DirectoryChooser directoryChooser) {
73 | // Set title for DirectoryChooser
74 | directoryChooser.setTitle("Выберите папку: ");
75 |
76 | // Set Initial Directory
77 | // directoryChooser.setInitialDirectory(new File(System.getProperty("user.home")));
78 | if (dir != null) {
79 | directoryChooser.setInitialDirectory(dir);
80 | }
81 | }
82 |
83 |
84 | public static void main(String[] args) {
85 |
86 | launch(args);
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/src/sample/RegDataWriter.java:
--------------------------------------------------------------------------------
1 | package sample;
2 |
3 | import java.io.File;
4 | import java.io.FileWriter;
5 |
6 | public class RegDataWriter {
7 | public String fullDirectoryName;
8 | public String rezult;
9 |
10 | public RegDataWriter(String fullDirectoryName, String rezult) {
11 | this.fullDirectoryName = fullDirectoryName;
12 | this.rezult = rezult;
13 | }
14 |
15 | public void saveToFile(String licFileName) {
16 |
17 | String path = fullDirectoryName + "\\" + licFileName.replace(".lic", "") + "_LicData.txt";
18 | System.out.println("path = " + path);
19 | try {
20 | File file = new File(path);
21 | FileWriter fw = new FileWriter(file);
22 | fw.write(rezult);
23 | fw.flush();
24 | fw.close();
25 | System.out.println("File saved");
26 | } catch (Exception e) {
27 | e.printStackTrace();
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Достаем информацию из файла лицензии 1С.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/miller7777777/LicDataExtractor/99a8152c7be2b574696314f6acad151f3dc186b4/Достаем информацию из файла лицензии 1С.docx
--------------------------------------------------------------------------------