Если проверять из приложения, загруженного в 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. Но и как показывает практика, с работой сивильных приложений в таком автокаде нет проблем.