Попытка разобраться с временным лицензированием приложений магазина

Автор Тема: Попытка разобраться с временным лицензированием приложений магазина  (Прочитано 57008 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Хотел бы понять суть и организацию защиты программ магазина через сервер Автодеска используя Entitlement API.
Получил несколько ответов от Viru в ходе переписки. Вот один из них раскрывающий более менее смысл, но не до конца.

Need : Lisp need “some” external help to call App store web based entitlement API. To know about entitlement API refer http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=24243865 . You can use any language which is capable of calling web based API. As lisp cannot perform this web based API, we have used .NET to make the web API call. 

еще:
unfortunately even arx sample depends on .NET to make the web service call (similar to lisp).

Насколько я понял без компиляции .NET не обойтись. Тогда как вообще все устроено. Что нужно загрузить в Автокад (какие файлы и что касательно .NET) помимо своего приложения чтобы связь с сервером заработала? Чтобы, например, функция в лиспе стала рабочей.
Непонятно также если Viru пишет, что реализовать можно на любом языке, но потом оказывается что arx и лисп не могут без .NET. Как тогда .NET редактировать, компелировать и загружать для человека который никогда с ним не был связан?
Не вериться что на с++(arx) нет примеров кода как вызывать web based API чтобы не трогать .NET, который думаю остановит многих от попыток понять, развивать и применять Entitlement API.

Жду разъяснений от людей на практике переваривших эту кашу.

   

 

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот пример от ADN DevTech: https://github.com/ADN-DevTech/EntitlementAPI/tree/master/Autodesk%20EntitlementAPI_AutoCAD.bundle/Contents/source
Основной код написан на C# - так намного проще - в виде lisp-функции с именем TestEntitlementLisp. Её же можно вызвать и из lisp и из ObjectARX (при помощи acedInvoke).
Теоретически наверное можно переписать на чистом C++, но я бы за это не стал браться если нет опыта Web-программирования на C++.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Непонятно также если Viru пишет, что реализовать можно на любом языке, но потом оказывается что arx и лисп не могут без .NET.
lisp однозначно не может самостоятельно использовать это API - ну нет у него таких возможностей. А вот на arx можно сделать, но (!!!) готовый пример (sample) от них использует .NET, так как это намного проще и в нём уже есть все готовые библиотеки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Понимание приходит медленно. Мне было понятно чтобы в лиспе заработала эта функция, то нужно как минимум загрузить arx файл где она прописана. Сейчас после ответа стало понятно что можно вообще не использовать arx, а эта функция появиться за счет .NET. А вот теперь вопросы:
1. NET приложение это программный файл, но с другим расширением, c каким?
2. Как его загружать из лиспа в Автокад, поскольку в лиспе будет проверка? По типу как arx файлы - arxload().
3. Как вообще компилировать проект .NET если он вообще не открывается в VS 2015. Я же надеюсь запускать и поэкспериментировать  в 2017 Автокаде. Кстате если приложение для Автокадов 2013-2017 это что нужно также как arx компилировать на трех VS.
4. Если его .NET нужно компилировать, то тогда там нужно что то менять? Что?
5. Кроме .NET какой язык еще может вызывать web based API? Может быть обычный Javascript?

Хотелось бы получить конкретные короткие ответы на мои вопросы, думаю не последние.

Вариант когда в ответ присылают 7-8 ссылок на ресурсы объясняющие частями одну данную тему не подходит - трудно четко представить что нужно и что точно делать.   





Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
1. NET приложение это программный файл, но с другим расширением, c каким?
Обычно dll, хотя расширение не принципиально. Можно и exe.
2. Как его загружать из лиспа в Автокад, поскольку в лиспе будет проверка? По типу как arx файлы - arxload().
Командой NETLOAD. А если ты делаешь BUNDLE, то там это совсем просто.
3. Как вообще компилировать проект .NET если он вообще не открывается в VS 2015. Я же надеюсь запускать и поэкспериментировать  в 2017 Автокаде. Кстате если приложение для Автокадов 2013-2017 это что нужно также как arx компилировать на трех VS.
Не понял. Что значит не открывается?
Кстате если приложение для Автокадов 2013-2017 это что нужно также как arx компилировать на трех VS.
Желательно. Хотя вероятно достаточно и одного.
5. Кроме .NET какой язык еще может вызывать web based API? Может быть обычный Javascript?
Зачем тебе еще какие-то заморочки если тебе нужно это использовать в lisp/arx?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
3. Как вообще компилировать проект .NET если он вообще не открывается в VS 2015. Я же надеюсь запускать и поэкспериментировать  в 2017 Автокаде.
Открыл проект в VS 2015, изменил пути к .NET-сборкам AutoCAD  (в каталоге ObjectARX\inc). И вуаля:


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Вариант когда в ответ присылают 7-8 ссылок на ресурсы объясняющие частями одну данную тему не подходит - трудно четко представить что нужно и что точно делать.   
Увы, но чаще всего именно так и бывает. Так что придётся приложить усилия, потратить время и добиться результата.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
У меня проект не открывается. Новая тема, нечего больше сказать, может vs не полный, не знаю.

А нельзя было Автодеску сделать для людей не (TestEntitlementLisp) а ту же  функцию лиспа (либо arx) но с параметрами индентификатора приложения и т.п. Раз уж все равно она уже реализована. Чтобы вообще не лезть в .NET тем кто никогда с ним не имел дело. Тогда бы можно было только распространять готовые откомпилированные .NET приложения для текущих версий Автокада.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
У меня проект не открывается. Новая тема, нечего больше сказать, может vs не полный, не знаю.
Какой файл открываешь и какое сообщение об ошибке? Открывать нужно было файл \source\NET\EntitlementAPI_AutoCAD.sln
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А нельзя было Автодеску сделать для людей не (TestEntitlementLisp) а ту же  функцию лиспа (либо arx) но с параметрами индентификатора приложения и т.п. Раз уж все равно она уже реализована. Чтобы вообще не лезть в .NET тем кто никогда с ним не имел дело. Тогда бы можно было только распространять готовые откомпилированные .NET приложения для текущих версий Автокада.
Это вопрос риторический. Не сделали - значит решили, что она не нужна достаточному количеству разработчиков.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
...проект открылся, почему не знаю, свойства проекта не открываются проект не компилируется.

Чувствую времени нужно немерено чтобы разобраться и в NET и вообще в эффективности такой защиты.
Пока которого нет.

На счет "риторического вопроса" я подкину мою идею программистам Автодеска. Думаю она не только бы мне пригодилась.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Чувствую времени нужно немерено чтобы разобраться и в NET и вообще в эффективности такой защиты.
На то, чтобы заставить работать этот пример будет достаточно одного дня. Тем более, что C# достаточно схож с C++.
Ошибки именно те, о которых я писал выше, потому что ты "не":
Цитировать
изменил пути к .NET-сборкам AutoCAD  (в каталоге ObjectARX\inc)
как я писал выше.
Вот видео:
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Если я правильно понял, то возникает ошибка при входе в свойства проекта. Чтобы этого не возникало попробуй удалить файл EntitlementAPI_AutoCAD.v11.suo до открытия проекта в VS. Возможно понадобится регистрация msxml3.dll:
Старт —> Выполнить —> regsvr32  %SystemRoot%\System32\msxml3.dll
Старт —> Выполнить —> regsvr32  %SystemRoot%\SysWOW64\msxml3.dll
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
А нельзя было Автодеску сделать для людей не (TestEntitlementLisp) а ту же  функцию лиспа (либо arx) но с параметрами индентификатора приложения и т.п. Раз уж все равно она уже реализована. Чтобы вообще не лезть в .NET тем кто никогда с ним не имел дело. Тогда бы можно было только распространять готовые откомпилированные .NET приложения для текущих версий Автокада.
Стимулируют переход программистов на .NET и другие, более подходящие для серьезного программирования инструменты. Раз уж доросли до выкладывания приложений в магазин и их защиты, то необходимо освоить .NET хотя бы на уровне "скомпилировать готовый проект".

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Вот пример от ADN DevTech: https://github.com/ADN-DevTech/EntitlementAPI/tree/master/Autodesk%20EntitlementAPI_AutoCAD.bundle/Contents/source
Блин я даже скачать не знаю как :-(

Я правильно понимаю там в функцию TestEntitlementLisp уже записаны параметры #приложения и #пользователя? Если эти параметры сделать передаваемые в качеств аргументов, то можно тогда скомпилировать одну универсальную для всех Lispописателей функцию?
Понятно что враги могут узнать об этой функции и тупо переопределить её, но кто сильно захочет тот и так всё взломает и обойдёт.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Блин я даже скачать не знаю как :-(
Заходишь сюда:
https://github.com/ADN-DevTech/EntitlementAPI
Жмешь Clone or download -> Download ZIP
Или вот это: https://codeload.github.com/ADN-DevTech/EntitlementAPI/zip/master
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Александр Ривилис, спасибо, всё получилось, даже ObjectARX скачал, чтоб путь к нему указать. Кстати, без ObjectARX ни как, нельзя какую-нибудь из установленного AutoCAD папку указать?

Ещё вот такое сообщение показывает, якобы есть не обязательные строки?


Я так понял вот сюда нам тольок нужно прописать путь к своему приложению и можно компилировать?
Код - C# [Выбрать]
  1.  String appID = "<appstore.exchange.autodesk.com:Your App id>";
Как можно изменить код, чтобы это значение стало передаваемым в функцию аргументом? Чтоб раз скомпилировать и пользоваться для разных приложений.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не проверял, но думаю что должно быть так:
Код - C# [Выбрать]
  1.  String appID = "<appstore.exchange.autodesk.com:" + args[0].Value.ToString() + ">";
В функцию должен быть передан как минимум один строчный аргумент.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Не проверял, но думаю что должно быть так:
Код - C# [Выбрать]
  1.  String appID = "<appstore.exchange.autodesk.com:" + args[0].Value.ToString() + ">";
В функцию должен быть передан как минимум один строчный аргумент.
Что-то ему так не нравится :-(


Код - C# [Выбрать]
  1. // (C) Copyright 2015 by Microsoft
  2. //
  3. using System;
  4. using Autodesk.AutoCAD.Runtime;
  5. using Autodesk.AutoCAD.ApplicationServices;
  6. using Autodesk.AutoCAD.DatabaseServices;
  7. using Autodesk.AutoCAD.Geometry;
  8. using Autodesk.AutoCAD.EditorInput;
  9. using RestSharp;
  10. using RestSharp.Authenticators;
  11. using RestSharp.Contrib;
  12. using System.Net;
  13. // This line is not mandatory, but improves loading performances
  14. [assembly: CommandClass(typeof(EntitlementAPI_AutoCAD.MyCommands))]
  15.  
  16. namespace EntitlementAPI_AutoCAD
  17. {
  18.  
  19.     // This class is instantiated by AutoCAD for each document when
  20.     // a command is called by the user the first time in the context
  21.     // of a given document. In other words, non static data in this class
  22.     // is implicitly per-document!
  23.     public class MyCommands
  24.     {
  25.  
  26.         static private bool verifyEntitlement(string appId, string userId)
  27.         {
  28.             // REST API call for the entitlement API.
  29.             // We are using RestSharp for simplicity.
  30.             // You may choose to use other library.
  31.  
  32.             // (1) Build request
  33.             var client = new RestClient();
  34.             client.BaseUrl = new System.Uri("https://apps.exchange.autodesk.com");
  35.  
  36.             // Set resource/end point
  37.             var request = new RestRequest();
  38.             request.Resource = "webservices/checkentitlement";
  39.             request.Method = Method.GET;
  40.  
  41.             // Add parameters
  42.             request.AddParameter("userid", userId);
  43.             request.AddParameter("appid", appId);
  44.  
  45.             // (2) Execute request and get response
  46.             IRestResponse<EntitlementResult> response = client.Execute<EntitlementResult>(request);
  47.  
  48.             // Get the auth token.
  49.             bool isValid = false;
  50.             if (response.Data != null && response.Data.IsValid)
  51.             {
  52.                 isValid = true;
  53.             }
  54.  
  55.             //  
  56.             return isValid;
  57.         }
  58.  
  59.        
  60.  
  61.         [LispFunction("TestEntitlementLisp", "TestEntitlementLisp")]
  62.         public int TestEntitlement_Lisp(ResultBuffer args) // This method can have any name
  63.         {
  64.             Document doc = Application.DocumentManager.MdiActiveDocument;
  65.             Editor ed = doc.Editor;
  66.  
  67.             //app id
  68.             //replace your App id here...
  69.             //contact appsubmissions@autodesk.com for the App Id
  70.             String appID = args[0].Value.ToString();
  71.             // String appID = "<appstore.exchange.autodesk.com:Your App id>";
  72.  
  73.  
  74.             //Steps to get the user id
  75.             String userID = Application.GetSystemVariable("ONLINEUSERID") as String;
  76.  
  77.             //Not logged in with Autodesk Id, hence we can not get user id
  78.             if (userID.Equals(""))
  79.             {
  80.                 ed.WriteMessage("Entitlement API check failed. Please log-in to Autodesk 360\n");
  81.  
  82.                 //you can choose to return any number like 100 for fail & 200 for pass..
  83.                 return 0;
  84.             }
  85.  
  86.             bool isValid = verifyEntitlement(appID, userID);
  87.  
  88.  
  89.             if (isValid)
  90.             {
  91.                 //User has downloaded the App from the store and hence is a valid user...
  92.                 ed.WriteMessage("\nEntitlement API check successful \n");
  93.                 ed.WriteMessage("User can use the App\n");
  94.             }
  95.             else
  96.             {
  97.                 //Not a valid user. Entitlement check failed.  
  98.                 ed.WriteMessage("Not a valid user. Entitlement API check failed\n");
  99.                 return 0;
  100.             }
  101.  
  102.             return 1;
  103.         }
  104.  
  105.         //command to be called
  106.  
  107.         [CommandMethod("ADNPLUGINS", "NETAppCommand", CommandFlags.Modal)]
  108.         static public void TestEntitlement_NET()
  109.         {
  110.             //if (!verifyEntitlement())
  111.             //{
  112.             //    return ;
  113.             //}
  114.             Document doc = Application.DocumentManager.MdiActiveDocument;
  115.             Editor ed = doc.Editor;
  116.  
  117.             //app id
  118.             //replace your App id here...
  119.             String appID = "appstore.exchange.autodesk.com:adncopyprotectiondemoapp_windows32and64";
  120.  
  121.             //Steps to get the user id
  122.             String userID = Application.GetSystemVariable("ONLINEUSERID") as String;
  123.  
  124.             //Not logged in with Autodesk Id, hence we can not get user id
  125.             if (userID.Equals(""))
  126.             {
  127.                 ed.WriteMessage("Entitlement API check failed. Please log-in to Autodesk 360\n");
  128.  
  129.                 //you can choose to return any number like 100 for fail & 200 for pass..
  130.                 return;
  131.             }
  132.  
  133.             bool isValid = verifyEntitlement(appID, userID);
  134.  
  135.            
  136.             if (isValid)
  137.             {
  138.                 //User has downloaded the App from the store and hence is a valid user...
  139.                 ed.WriteMessage("\nEntitlement API check successful \n");
  140.                 ed.WriteMessage("User can use the App\n");
  141.             }
  142.             else
  143.             {
  144.                 //Not a valid user. Entitlement check failed.  
  145.                 ed.WriteMessage("Not a valid user. Entitlement API check failed\n");
  146.                 return ;
  147.             }
  148.            
  149.  
  150.             //continue the function
  151.             return ;
  152.         }
  153.  
  154.     }
  155.  
  156.     class EntitlementResult
  157.     {
  158.         public String UserId { get; set; }
  159.         public String AppId { get; set; }
  160.         public bool IsValid { get; set; }
  161.         public String Message { get; set; }
  162.  
  163.     }
  164.  
  165. }


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Был не прав. Вместо:
Код - C# [Выбрать]
  1. String appID = args[0].Value.ToString();
должно быть:
Код - C# [Выбрать]
  1. String appID = args.AsArray()[0].Value.ToString();
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Александр Ривилис, да всё заработало, спасибо!
Такой ещё вопрос, там в коде если пользователь не вошёл в учётку возвращается nil и сообщение в ком строку, там на любое действие сообщения отправляются. убрать их не проблема.
И предварительно проверить тоже не фопрос
Код - Auto/Visual Lisp [Выбрать]
  1. (if (eq (getvar 'onlineuserid) "")
  2.   (alert "\n Пожалуйста, войдите в учётную запись Autodesk")
  3. (TestEntitlementLisp "app _id")
  4. )
Но может user не очень опытный и в душе не представляет как в неё входить...
При запуске "входа"  в комстроку ни какой команды не передается...

Или опять из Lisp это окно ни как не вызвать?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Но может user не очень опытный и в душе не представляет как в неё входить...
Лучше с таким не иметь дела. Боюсь, что и в остальном с ним будут проблемы.
Или опять из Lisp это окно ни как не вызвать?
Лучшее из того, что я смог придумать, это запустить команду _ONLINEOPTIONS
Правда если он такой неопытный, то он дальше не поймёт что ему вводить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Лучше с таким не иметь дела. Боюсь, что и в остальном с ним будут проблемы.
Пользователей нужно всяких любить :-)

Такой ещё вопрос возник, как проверить есть ли вообще доступ к интернету? Лучше конечно через Lisp, но на краяняк будем пробовать в NET функцию это засунуть.

Off-Topic: показать
Всех с новым годом!
Каникулы, для меня самое любимое время, когда можно спокойно по-программировать, пока не отвлекает, ни основная работа, ни пользователи...

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Цитировать
Такой ещё вопрос возник, как проверить есть ли вообще доступ к интернету?
в Win API есть функция InternetGetConnectedState. достучаться до нее можно практически с любого языка программирования. вот только смысла в этом нет в данном случае никакого :)
но самый простой, ну и самый правильный - это попытаться достучаться до какой-нить страницы в инете с заранее известным адресом (тоже функция WinAPI InternetCheckConnection).
чаще всего пытаются достучаться до поисковиков: гугл, яндекс,... в текущей мировой обстановке это не всегда срабатывает (поисковики могут быть под баном). но и это в данном конкретном случае не важно. у тебя уже есть адрес, который точно существует и к нему точно есть доступ (каким-то ж образом именно с этого адреса человечек получил инсталляционный пакет программы). функция verifyEntitlement как-раз занимается достукиванием до этого адреса. посмотри под дебагом на переменную response при выключенном интернете и при включенном. по поводу того, что функция вызывается после того, как получен userID, а проверка наличия интернета нужна намного раньше - а кто мешает вызвать эту функцию для userID="000" или "12345". для проверки коннекта достаточно знать, что пришел возврат от этой функции (естественно, саму функцию нада будет модернизировать, т.к. она возвращает сейчас false и если нет коннекта, и если коннект есть, но пользователь лицом не вышел :) )


ну и вдогонку, описалово класса, к которому принадлежит переменная response http://developer.intersoftsolutions.com/display/crosslightapi/IRestResponse+Interface

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Такой ещё вопрос возник, как проверить есть ли вообще доступ к интернету?
1. Зачем?
2. А если интернет есть, а конкретные сайты / IP заблочены или самим пользователем, или админами, или провайдером, то к какой категории это отнести?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Николай Горлов, спасибо за совет, люблю твои посты читать они обычно длинные и интересные. Но ссылка не работает :-(

Зачем?
В случаи конкретно с "временным" лицензированием, думаю не зачем, там нужно каждый раз проверять, не истекло ли время, опять же покупка подписки на месяц, не должна обязывать пользователя быть онлайн весь этот месяц?

А вот в случаи покупки приложения "навсегда" нужно предусмотреть и оффлайн проверку.

А если интернет есть, а конкретные сайты / IP заблочены или самим пользователем, или админами, или провайдером, то к какой категории это отнести?
Спасибо так и на писал, либо с интернетом беда, либо к админу бегите :-)

В общем получились вот такие функции, верю что проще было бы всё это засунуть в один Net, но для меня Net пока тёмный лес, из этого примера 1\3 кода понятна, 1\3 - догадываюсь, 1\3 - душе не представляю...

Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.EditorInput;
  7. using RestSharp;
  8. using RestSharp.Authenticators;
  9. using RestSharp.Contrib;
  10. using System.Net;
  11. // This line is not mandatory, but improves loading performances
  12. [assembly: CommandClass(typeof(EntitlementAPI_AutoCAD.MyCommands))]
  13.  
  14. namespace EntitlementAPI_AutoCAD
  15. {
  16.  
  17.     // This class is instantiated by AutoCAD for each document when
  18.     // a command is called by the user the first time in the context
  19.     // of a given document. In other words, non static data in this class
  20.     // is implicitly per-document!
  21.     public class MyCommands
  22.     {
  23.  
  24.         static private int verifyEntitlement(string appId, string userId)
  25.         {
  26.             // (1) Build request
  27.             var client = new RestClient();
  28.             client.BaseUrl = new System.Uri("https://apps.exchange.autodesk.com");
  29.  
  30.             // Set resource/end point
  31.             var request = new RestRequest();
  32.             request.Resource = "webservices/checkentitlement";
  33.             request.Method = Method.GET;
  34.  
  35.             // Add parameters
  36.             request.AddParameter("userid", userId);
  37.             request.AddParameter("appid", appId);
  38.  
  39.             // (2) Execute request and get response
  40.             IRestResponse<EntitlementResult> response = client.Execute<EntitlementResult>(request);
  41.  
  42.             // Get the auth token.
  43.             int isValid;
  44.             if (response.Data == null)
  45.                 isValid = 0;
  46.             else
  47.                 if (response.Data.IsValid)
  48.                 isValid = 1;
  49.             else isValid = 2;          
  50.  
  51.             //  
  52.             return isValid;
  53.         }
  54.  
  55.        
  56.  
  57.         [LispFunction("TestEntitlementLisp", "TestEntitlementLisp")]
  58.         public int TestEntitlement_Lisp(ResultBuffer args) // This method can have any name
  59.         {
  60.             Document doc = Application.DocumentManager.MdiActiveDocument;
  61.             Editor ed = doc.Editor;
  62.  
  63.             //app id          
  64.             String appID = args.AsArray()[0].Value.ToString();
  65.            
  66.             //Steps to get the user id
  67.             String userID = Application.GetSystemVariable("ONLINEUSERID") as String;
  68.  
  69.             int isValid = verifyEntitlement(appID, userID);
  70.                      
  71.             return isValid;
  72.         }
  73.  
  74.         //command to be called      
  75.  
  76.     }
  77.  
  78.     class EntitlementResult
  79.     {
  80.         public String UserId { get; set; }
  81.         public String AppId { get; set; }
  82.         public bool IsValid { get; set; }
  83.         public String Message { get; set; }
  84.  
  85.     }
  86.  
  87. }
  88.  


Код - Auto/Visual Lisp [Выбрать]
  1. (defun Check_Valid (app_id Russ / user_id user_name result pass)
  2.                                         ;(Check_Valid "7024841255247590068" t)
  3.   (setq user_id   (getvar 'onlineuserid)
  4.         user_name (getvar 'onlineusername)
  5.         pass      (strcat
  6.                     "HKEY_CURRENT_USER\\Software\\BearDyugin\\"
  7.                     app_id
  8.                   )
  9.   )
  10.   (cond
  11.     ((eq user_id "")
  12.      (if Russ
  13.        (alert
  14.          "\nПожалуйста, войдите в учётную запись Autodesk, \nдля проверки права на использование приложения \n\nА затем запустите приложение повторно."
  15.        )
  16.        (alert
  17.          "\nPlease log in to the Autodesk account \nto verify the right to use the application. \n\nAnd then run the application again"
  18.        )
  19.      )
  20.     )
  21.     ((not user_id)
  22.      (if Russ
  23.        (alert
  24.          "\nК сожалению ваша версия AutoCAD не поддерживается."
  25.        )
  26.        (alert
  27.          "\nUnfortunately your version of AutoCAD is not supported."
  28.        )
  29.      )
  30.     )
  31.     (TestEntitlementLisp
  32.      (setq result (TestEntitlementLisp app_id))
  33.      (cond
  34.        ((eq result 0)                   ;Нет интернета
  35.         (or
  36.           (eq (vl-registry-read
  37.                 pass
  38.                 user_id
  39.               )
  40.               "Ok"
  41.           )
  42.           (if Russ
  43.             (alert
  44.               (strcat
  45.                 "    "
  46.                 user_name
  47.                 ", к сожалению, мы не смогли получить доступ к сайту https://apps.exchange.autodesk.com
  48. \n    Проверьте пожалуйста ваше интернет соединении,
  49. \n    Либо обратитесь к вашему системному администратору.
  50. "
  51.               )
  52.             )
  53.             (alert
  54.               (strcat
  55.                 "    "
  56.                 user_name
  57.                 ", unfortunately, we could not access the site https://apps.exchange.autodesk.com
  58. \n    Please check your Internet connection,
  59. \n    Either ask your system administrator for help."
  60.               )
  61.             )
  62.           )
  63.         )
  64.        )
  65.        ((eq result 1)                   ;Пользователь наш!
  66.         (or
  67.           (eq (vl-registry-read
  68.                 pass
  69.                 user_id
  70.               )
  71.               "Ok"
  72.           )
  73.           (vl-registry-write
  74.             pass
  75.             user_id
  76.             "Ok"
  77.           )
  78.         )
  79.        )
  80.        ((eq result 2)                   ;Пользователь не наш :-(
  81.         (if Russ
  82.           (alert
  83.             (strcat
  84.               "    "
  85.               user_name
  86.               ", к сожалению, мы не нашли вас в базе купивших данное приложение.
  87. \n    Проверьте пожалуйста, возможно при покупке вы использовали другой аккаунт.
  88. \n    Если вы считаете, что произошла ошибка, свяжитесь со мной: BearDyugin@gmail.com"
  89.             )
  90.           )
  91.           (alert
  92.             (strcat
  93.               "    "
  94.               user_name
  95.               ", unfortunately, we did not find you in the database who bought this application.
  96. \n    Please check, maybe you used a different account when purchasing.
  97. \n    If you think that an error has occurred, please contact me: BearDyugin@gmail.com"
  98.             )
  99.           )
  100.         )
  101.        )
  102.      )
  103.     )
  104.   )
  105. )

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Цитировать
они обычно длинные и интересные
постараюсь и в этот раз оправдать оказанное доверие :):):)

Цитировать
Но ссылка не работает :-(
:o как не работает. я вот только что по ней и правой и левой кнопкой клацал - открывает в новом окне. потом скопировал текст ссылки в буфер и вставил в новое окно браузера. тоже открылась страница.

Цитировать
верю что проще было бы всё это засунуть в один Net
увы, тут могу не согласиться. всё написанное на .net (exe,dll) с легкостью можно превратить обратно в проект (даже не в одинокий cs файл, а в полноценный проект с ресурсами). тут вроде бы уже поднимался где-то этот вопрос, так что подробно описывать не буду. скажу только, что есть существенная разница между бинарным исполняемым файлом (например, С++ вариант реализации) и файлом инструкций (C#). бинарный файл - это машинный асемблер, а файл инструкций - это просто слегка ужатый исходный проект в одном файле. следовательно, чтоб разобраться в работе C# dll или exe, нужен простой декомпилятор (кажись даже в поставку самой студии входит, но могу ошибаться), кружка кофе и минимальные знания как сбилдить декомпилированный проект и запустить его под отладчиком. и сразу станет понятно, ЧТО функция должна вернуть, чтоб программа работала исправно. потом, например, затираются внутренности функции и остается только return 100500; :). компилируется и подменяется исходный файл. так что в .net и автодеск и майкрософт советуют писать то, что не жалко. и почаще вставлять комментарии с копирайтами :):):), но никак не защиту

Цитировать
В общем получились вот такие функции
1. не проверяется хоть какая-то контрольная сумма dll, а значит её можно просто подменить
2. в dll можно передать не только appId но и userId, т.к. он уже известен до запуска функции
3. редирект в файле hosts (C:\windows\system32\drivers\etc\) и, например, Apache безболезненно убивают этот вариант автодесковской защиты.
4. а вот что будет, если скопировать ветку реестра полнофункциональной программы на другой комп, отключить там инет и запустить программу?

PS: где-то читал про онлайн защиту автодеска, что по первому варианту запроса что-то там где-то у них формируется, ну и если отправить другой запрос, то получаем ранее сформированный результат. по крайней мере это больше вселяет уверенность в то, что общение происходит именно с сервером автодеск, а не клоном сервера размером в одну простую функцию на локальном компьютере. увы, не могу найти эту ссылочку :(

-------------------------------------------------------------------------
если уж говорить об онлайн проверке, то без СВОЕГО сервера с таблицей минимум из двух полей: например, UUID материнской платы и userId не обойтись.
а автодесковский вариант защиты нужен лишь для того, чтоб была возможность автоматически добавить набор (UUID - userId) на свой сервер.
например, логика может быть такой. изначально идет проверка по UUID-userId на своем сервере. если ничего не нашло запускаем автодесковский вариант. если автодесковский вариант разрешил работать, добавляем в таблицу на своем сервере пользовательские UUID-userId.

варианты обработки своей таблицы:
- есть UUID, userId правильный - работаем
- есть UUID, userId другой - не работаем
- есть UUID, userId пустой - работаем, т.к. пользователь просто вышел из автодесковского аккаунта
- левый UUID, userId правильный - тут на твое усмотрение. если желаешь разрешить одному купившему запускать на нескольких компах, тогда считаем, сколько раз userId встречается в таблице и если меньше чем разрешено, автоматом добавили, иначе - пиши письмо разработчику, т.к. ты уже запускал эту программу на другом компе. ну и после письма нужно просто убить строку из таблицы, чтоб её можно было автоматом пересоздать для нового UUID.

саму таблицу можно расширить еще полем appId, чтоб пользоваться одной таблицей для всех приложений. также можно еще ввести поле isBanned. и если чудик хочет пересесть на другой комп с купленной программой, но старая строка помечается isBanned = true. ну и естественно, нужна проверка на это поле в основном алгоритме защиты.

можно пойти еще дальше и передавать забаненные ключи через локальную сеть (например, через сам чертеж). это вариант для хитрозадых, которые наплодили инсталляций на 10 компах и поморочив голову разработчику постепенно выводили их из сети. та не вопрос. открыл файл, считала защита из файла забаненные UUID, сверила с текущим и... курите бамбук :)

Это я к чему так подробно... прочитал личное сообщение от 11.11.2017 :). Извиняй, исходниками поделиться не могу, но логику тут описал. ток я пользуюсь не только UUID. там еще есть серийник монитора, HDD с установленной виндой и серийники планок оперативки. естественно, всё адаптируется под частичную замену оборудования, но купив 1 лицензию не получится разобрать комп так, чтоб вышло 2 лицензии :):):)

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Николай Горлов, спасибо за развёрнутый ответ.

Но я вот думаю, а есть смысл на столько заморачиваться с защитой? Ну сколько этих хацкеров? И тем более при желание ломают всё!

Я согласен, что обладая определённым уровнем знаний в программировании это и не такие уж заморочки (тобой описанный алгоритм)


Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Цитировать
Но я вот думаю, а есть смысл на столько заморачиваться с защитой?
для пятибаксовых программ - нет, т.к. строчек кода защиты будет раз в надцать больше, чем строчек кода самой программы. а учитывая особенность C#, такую защиту можно рассматривать как подарок для тех, кто не желает писать защиту самостоятельно :):):). скачал демку программы, декомпилировал dll, вставил к себе исходники слегка модернизировав.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
для пятибаксовых программ - нет, т.к. строчек кода защиты будет раз в надцать больше, чем строчек кода самой программы. а учитывая особенность C#, такую защиту можно рассматривать как подарок для тех, кто не желает писать защиту самостоятельно . скачал демку программы, декомпилировал dll, вставил к себе исходники слегка модернизировав.
Такая защита определённо лучше, чем совсем без неё.
Как уже неоднократно отмечалось (и здесь тоже): разработка системы защиты по трудозатратам может превысить разработку основной программы. Со временем, возможно, это будет иметь смысл. Но на начальных этапах можно и по-простому. В большинстве случаев, те кто сумеют снять защиту, способны самостоятельно написать аналогичное приложение. И предпочтут именно это и сделать, чем разбираться в чужом коде или использовать его как "чёрный ящик".

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
В большинстве случаев, те кто сумеют снять защиту, способны самостоятельно написать аналогичное приложение.
Нет, Дима! Это совершенно разные "умения". В остальном же я с тобой согласен.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Такая защита определённо лучше, чем совсем без неё.
Такая - это вкратце описанная мной в посте #26 или автором топика в посте #25?
Если из поста #25 - согласен полностью. Единственное что, позакрывать мелкие дыры, чтоб нельзя было просто подменить dll или ветку реестра и всё.
Если же из поста#26... Я не против защиты. Она действительно нужна. Но не забываем про C#. Было б на C++ - слова б не сказал. Но дарить идею и готовую реализацию того, как получить набор настоящих характеристик железа, как обмениваться данными с сервером лицензий и как переносить эти самые лицензии втихую с компов подключенных к интернету по всему отделу, сидящему без интернета... Например, у меня ушло только пару месяцев на то, чтоб правильно собрать настоящие характеристики железа для ограниченной учетной записи. Так что будет слишком круто, если кто-то получит это (ну и всё остальное) за пару минут, нажав пару раз мышкой в экранные кнопки. По поводу того, что будет трудно разобраться в коде - бред. Любой уважающий себя программист оставляет тонны комментариев в каждой функции, т.к. во-первых, вернуться к редактированию кода он может и через 3-4 года, а во-вторых, редактировать код может уже не он, а его коллега. Да, можно конечно обработать dll-ку каким-нить криптошифровальщиком, но... бесплатный - расшифровывается бесплатными обфускаторами за пару минут, а платный - годовая подписка за $300 в среднем, а снимается платными обфускаторами, за которые в принципе можно и не платить :).

Я придерживаюсь мнения, что всё должно быть в меру, так что вариант #25 вполне подходит для автодесковского магазина. Из минусов этого варианта - банально открытый код реализации проверки валидности пользователя по всему интернету, ну и использование интерпретируемого языка программирования для создания этой самой проверки. ну то такэ :)

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Такая - это вкратце описанная мной в посте #26 или автором топика в посте #25?
Я имел в виду "защиту от BearDyugin" :)
По поводу того, что будет трудно разобраться в коде - бред.
В чужом коде, да ещё и без комментариев, разобраться порой очень сложно. А если ещё написано начинающим программистом без соблюдения даже правил нотации... В общем, развлечение "на любителя".
Любой уважающий себя программист оставляет тонны комментариев в каждой функции, т.к. во-первых, вернуться к редактированию кода он может и через 3-4 года, а во-вторых, редактировать код может уже не он, а его коллега.
Комментарии в dll не переносятся. Они либо в исходниках, либо в отдельном XML-файле (если речь идёт о XML-комментариях).

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Комментарии в dll не переносятся. Они либо в исходниках, либо в отдельном XML-файле (если речь идёт о XML-комментариях).
Это 100% сведения или так, разговор поддержать?  ;D

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Это 100% сведения или так, разговор поддержать?
Ну а как иначе-то? Компилятор переводит код в IL. Исходники внутрь DLL не помещаются. Откуда там взяться комментариям? Они, как и директивы препроцессора и т.п. элементы - только в исходном коде.

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
UUID
Я наоборот хотел отвязаться от привязки к железу, только к пользователю, потому что достали письма от чуваков, которые сменили ПК, сменили место работы. Они почему-то уверены что купив один раз, они получили право пользования на всю жизнь.

И я не вижу большого смысла бороться с хитрожопыми пользователями, а лишь наоборот нужно заботится об удобстве использования твоего ПО для рядовых пользователь. На примере то го же Autodesk, я вообще не заметил с его стороны борьбы с пиратством, и на мой взгляд это верное решение, за счёт этого они получили более лояльного пользователя и большую распространённость своего ПО.

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Николай, а подскажи такой вопрос, Id пользователя это всегда только набор циферок, или буквы тоже могут быть?

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Id пользователя это всегда только набор циферок, или буквы тоже могут быть?
Могут и буквы присутствовать.

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Заменил
Код - C# [Выбрать]
  1. [LispFunction("TestEntitlementLisp", "TestEntitlementLisp")]
на своё название
Код - C# [Выбрать]
  1. [LispFunction("My_Entitlement", "My_Entitlement")]
и функция в AutoCAD стала выдавать ошибку...
Цитировать
System.IO.FileNotFoundException: Не удалось загрузить файл или сборку "RestSharp, Version=105.1.0.0, Culture=neutral, PublicKeyToken=null" либо одну из их зависимостей. Не удается найти указанный файл.
Имя файла: 'RestSharp, Version=105.1.0.0, Culture=neutral, PublicKeyToken=null'
   в EntitlementAPI_AutoCAD.MyCommands.verifyEntitlement(String appId, String userId)
   в EntitlementAPI_AutoCAD.MyCommands.TestEntitlement_Lisp(ResultBuffer args)
   в Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object commandObject, Boolean bLispFunction)
   в Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo mi, Object commandObject, Boolean bLispFunction)
   в Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.Invoke(MethodInfo mi, Boolean bLispFunction)
   в Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.InvokeLisp()
Предупреждение: регистрация привязки сборок выключена.
Чтобы включить регистрацию ошибок привязки сборок, установите значение параметра реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) в 1.
Примечание. Регистрация ошибок привязки сборок может привести к некоторому снижению производительности.
Чтобы отключить эту функцию, удалите параметр реестра [HKLM\Software\Microsoft\Fusion!EnableLog].

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Я сомневаюсь, что нужно обязательно 2 одинаковых параметра задавать для LispFunction, подозреваю, что можно обойтись одним. Проверить пока не на чем.
Но проблема не в переименовании, а в чём-то другом. Netload без ошибок срабатывает? Вообще, в какой момент ошибка возникает? При вызове лисп-функции?

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Я наоборот хотел отвязаться от привязки к железу, только к пользователю, потому что достали письма от чуваков...
Мне кажется, это не совсем правильная концепция... Казалось бы достаточно ввести в лицензионное соглашение пунктик об ограничении количества активаций (например не более трёх). И если подобный "чувак" захочет активировать лицензию большее количество раз - указываешь ему на этот пунктик...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
и функция в AutoCAD стала выдавать ошибку...
AutoCAD не находит RestSharp.dll. К переименованию это никакого отношения не имеет. Проверь что твоя dll и RestSharp.dll находятся в одном каталоге.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
AutoCAD не находит RestSharp.dll. Проверь что твоя dll и RestSharp.dll находятся в одном каталоге.
Да, точно, всё дело в этом, но зачем нам 2 dll, можно их как-то в один объединить?
Причём этот RestSharp.dll раз в 10 больше по объёму чем основной dll файл и рядом ещё и RestSharp.xml не маленький лежит...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Николай, а подскажи такой вопрос, Id пользователя это всегда только набор циферок, или буквы тоже могут быть?
Если ты говоришь про ONLINEUSERID,  то только цифры или пустая строка, если пользователь не залогинился.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Да, точно, всё дело в этом, но зачем нам 2 dll, можно их как-то в один объединить?
Причём этот RestSharp.dll раз в 10 больше по объёму чем основной dll файл и рядом ещё и RestSharp.xml не маленький лежит...
Теоретически это возможно (если не противоречит лицензионному соглашению), но это задача не для твоего уровня знаний C#. Так что брось и делай как полагается. Твоя dll именно потому такая маленькая, потому что RestSharp.dll такая большая. Иначе размер твоей dll был бы (почти) как сумма размеров обеих dll-файлов.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Казалось бы достаточно ввести в лицензионное соглашение пунктик об ограничении количества активаций (например не более трёх)
Так это опять надо эти активации считать... Повторюсь, я лучше больше время уделю порядочным пользователям, чем со всякими негодяями бороться.

Если ты говоришь про ONLINEUSERID,  то только цифры или пустая строка, если пользователь не залогинился.
Да, про него, перед записью его на ПК для офлайн проверки, решил для пущей надёжности, над ним пару математических операций произвести :-) Но получив ответ от Николая, на всякий случай написал функцию, заменяющею встретившиеся в нём буковки на циферки.
Так что брось и делай как полагается.
Ага, знать бы ещё как оно полагается.
В общем разместил RestSharp.dll рядом с моей, при этом RestSharp.xml вроде как не понадобился, и загрузку RestSharp.dll в PackageContents.xml тоже прописывать нет необходимости.

Всем большое спасибо!

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Если ты говоришь про ONLINEUSERID,  то только цифры или пустая строка, если пользователь не залогинился.
Я так поял, вопрос был про userid, который вставляется в запрос https.
{"UserId":"2N5FMZW9CCED","AppId":"2024453975166401172","IsValid":false,"Message":"Ok"}. Где там только цифры? Взято отсюда: http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=24243865
У моих пользователей тоже есть буквы в id.

Ну а как иначе-то? Компилятор переводит код в IL. Исходники внутрь DLL не помещаются. Откуда там взяться комментариям?
Вот прям в выходной день до работы дошел, правда по пути по своим делам ))). Помню же, что таким образом восстанавливал свой случайно удаленный ревитовский проект. И таки да, в дебажной dll всё восстанавливается на 100% относительно исходников - и коментарии и названия файлов проекта. В релизовой версии увы - только код без коментариев и иногда плывет разметка,  и все классы объединяются в один файл, но при желании разобраться можно.

перед записью его на ПК для офлайн проверки, решил для пущей надёжности, над ним пару математических операций произвести :-) Но получив ответ от Николая, на всякий случай написал функцию, заменяющею встретившиеся в нём буковки на циферки.
тут главное не перемудрить ))).

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
У моих пользователей тоже есть буквы в id.
Значит что-то изменили. Раньше (насколько я знаю) были только одни цифры. В любом случае не стоит надеяться, что этот формат не изменится в будущем, так как это внутренний недокументированный формат Autodesk.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
И таки да, в дебажной dll всё восстанавливается на 100% относительно исходников - и коментарии и названия файлов проекта.
Думаю, что это благодаря наличию файла pdb рядом с dll.

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Повторюсь, я лучше больше время уделю порядочным пользователям, чем со всякими негодяями бороться.
Ну человек заплативший деньги не может быть негодяем (по-моему)...:)

Так это опять надо эти активации считать...
Ну можно и автоматизировать данный процесс. Существует масса готовых и удобных решений для данных целей. Например вот это. Продукт безусловно стоит денег (правда не знаю каких ибо сам не пользовал), но судя по описанию и разнообразию "фич" создаётся приятное впечатление. Кстати одно из приложений (которое я нашел в нашем магазине) защищено таким софтом.

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
С этим onlineuserid свои приколы, сегодня вышел на работу ,решил ещё раз всё затестить...

И не могу войти в учётку ни в одном из AutoCAD'ов :-(
Ввожу емаил\пароль весь AutoCAD мигает и реакции 0, после чего кнопка "войти в учётку" больше не запускает диалог "входа"
При этом в Приложение Autodesk для ПК в учётку входит и выходит без проблем.

Причём ладно бы ругался как-то, может ему не нравится что на 2-3 других устройствах я уже вошёл под учёткой или ещё чего ему не нравится.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Это могла быть проблема со стороны серверов Autodesk. Иногда полезно проверить всё ли с ними в порядке: https://health.autodesk.com
Вот такая история:


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Код - C# [Выбрать]
  1.  client.BaseUrl = new System.Uri("https://apps.exchange.autodesk.com");
Сегодня хотел прикрутить онлайн проверку к новым приложениям, запускаю проверку, а она не работает!
Говорит
Код - Auto/Visual Lisp [Выбрать]
  1. (alert
  2.               (strcat
  3.                 "    "
  4.                 user_name
  5.                 ", к сожалению, мы не смогли получить доступ к сайту https://apps.exchange.autodesk.com
  6. \n    Проверьте пожалуйста ваше интернет соединении,
  7. \n    Либо обратитесь к вашему системному администратору.
  8. "
  9.               )
  10.             )
Думаю как так-то... ищу эту тему, и замечаю что ссылки на проверку может не содержать .exchange
https://apps.autodesk.com/webservices/checkentitlement?userid=201011031059843&appid=7024841255247590068
Удалил .exchange и всё заработало.
Как бы не очень приятный момент, хорошо я на этот случай предусмотрел запись в реестр при первой удачной попытке, и обращение к этой записи в подобном случаи, когда нет доступа к сайту или интернету.


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Удалил .exchange и всё заработало.
Насколько я помню это уже давным-давно удалили... И https://apps.exchange.autodesk.com переадресовывает на https://apps.autodesk.com
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
уже давным-давно удалили
Да, возможно и давно, но в коде 3-х летней давности написано с .exchange
https://github.com/ADN-DevTech/EntitlementAPI/blob/master/Autodesk%20EntitlementAPI_AutoCAD.bundle/Contents/source/NET/EntitlementAPI_AutoCAD/myCommands.cs
И https://apps.exchange.autodesk.com переадресовывает на https://apps.autodesk.com
Ну оно и логично было бы... Но у меня не переадресовыввет

Возможно это опять из-за с РКН и Телеграмм...
« Последнее редактирование: 01-05-2018, 06:29:31 от BearDyugin »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Ну оно и логично было бы... Но у меня не переадресовыввет
Возможно это опять из-за с РКН и Телеграмм...
Хм. Ну чьи тут происки сказать сложно. Нужно экспериментировать, причем с твоей стороны.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Возможно это опять из-за с РКН и Телеграмм...
Подтверждаю - ссылка битая:

Похоже Телеграмм побеждён...

Хм. Ну чьи тут происки сказать сложно. Нужно экспериментировать, причем с твоей стороны.
Видимо в Киеве более радужная ситуация...

Оффлайн bender

  • ADN Club
  • **
  • Сообщений: 62
  • Карма: 4

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
bender,
да ладно ....
А город-то какой? Стабильно грузится только через Tor.

Оффлайн bender

  • ADN Club
  • **
  • Сообщений: 62
  • Карма: 4
А город-то какой? Стабильно грузится только через Tor.

Дальнее Замкадье или Моск. обл.