Если проверять из приложения, загруженного в AutoCAD/Civil 3D, то можно так:
- /// <summary> 
- /// Является ли запущенный AutoCAD Civil'ом 
- /// </summary> 
- public static bool IsCivilApplication(bool msg) 
- { 
-     string rootKeyNumber = null; 
-     Version ver = Application.Version; 
-     bool ret; 
-   
-     if (ver.Major == 19 && ver.Minor == 1) 
-         rootKeyNumber = "D000"; 
-     else if (ver.Major == 20 && ver.Minor == 0) 
-         rootKeyNumber = "E000"; 
-     else if (ver.Major == 20 && ver.Minor == 1) 
-         rootKeyNumber = "F000"; 
-     else if (ver.Major == 21) 
-         rootKeyNumber = "0000"; 
-     else if (ver.Major == 22 && ver.Minor == 0) 
-         rootKeyNumber = "1000"; 
-     else if (ver.Major == 23 && ver.Minor == 0) 
-         rootKeyNumber = "2000"; 
-   
-     if (string.IsNullOrEmpty(rootKeyNumber)) 
-     { 
-         ret = false; 
-         if (msg) 
-             Application.ShowAlertDialog 
-                 (string.Format("Not supported version: {0}", ver)); 
-     } 
-     else 
-     { 
-         ret = HostApplicationServices.Current 
-             .MachineRegistryProductRootKey.Contains(rootKeyNumber); 
-         if (!ret && msg) 
-         { 
-             Application.ShowAlertDialog("It is not Civil 3D!"); 
-         } 
-     } 
-   
-     return ret; 
- } 
-   
Метод далеко не идеален, но работает. Подойдёт для версий 2014-2019. Когда выйдет новая версия, его надо будет изменять.
Если же из внешнего приложения: 
http://adn-cis.org/eto-ekzemplyar-prilozheniya-civil-3d.htmlЕщё один момент: если запущен Civil3D as AutoCAD, то проверка будет считать, что это Civil 3D. Но и как показывает практика, с работой сивильных приложений в таком автокаде нет проблем.