Борьба с отключением UpdaterC#

Место общения программистов C#
Ответить
Anonymous
 Борьба с отключением Updater

Сообщение Anonymous »

Мне не удалось заставить это работать. Я думаю, что я делаю что-то не так с преобразованиями. Я просто хочу отключить средство обновления после того, как оно будет реализовано в приложении.
Ниже по порядку приведены классы «Инициализация приложения», «Утилитный класс» и «Отключенный класс».
Запуск приложения
try
{
UtilsAssemblyLock.AssemblyLockUpdaterId assemblyLockUpdater =
new UtilsAssemblyLock.AssemblyLockUpdaterId(application
.ActiveAddInId);
UpdaterRegistry.RegisterUpdater(assemblyLockUpdater, true);
UpdaterRegistry.AddTrigger(
assemblyLockUpdater.GetUpdaterId(),
new ElementClassFilter(typeof(FabricationPart)),
Element.GetChangeTypeParameter(new ElementId(BuiltInParameter.FABRICATION_PART_WEIGHT)));

UtilsAssemblyLock.assemblyLockedFailureId =
new FailureDefinitionId(Guid.NewGuid());
FailureDefinition.CreateFailureDefinition(
UtilsAssemblyLock.assemblyLockedFailureId,
FailureSeverity.Error,
"S.A.I.: \n" + "Cannot edit assembly without permission.");
}
catch (Exception ex3)
{
MessageBox.Show(ex3.Message);
return Result.Cancelled;
}

Класс утилит
public class UtilsAssemblyLock
{
public static FailureDefinitionId assemblyLockedFailureId;

public class AssemblyLockUpdaterId : IUpdater
{
private readonly UpdaterId assemblyLockUpdaterId;
private FabricationDimensionDefinition _dimensionDefinition;

public AssemblyLockUpdaterId(AddInId id)
{
assemblyLockUpdaterId = new UpdaterId(id, new Guid("7595F412-275B-4F65-A354-7F9CB439283B"));
}

public void Execute(UpdaterData data)
{
try
{
Document doc = data.GetDocument();
List ids = new List();
ids.AddRange(data.GetAddedElementIds());
ids.AddRange(data.GetModifiedElementIds());
ids.AddRange(data.GetDeletedElementIds());

foreach (ElementId id in ids)
{
if (doc.GetElement(id) is FabricationPart fabricationPart)
{
if (!data.IsChangeTriggered(id, Element.GetChangeTypeParameter(new ElementId(BuiltInParameter.FABRICATION_PART_WEIGHT))))
{
break;
}

if (!fabricationPart.IsValidObject)
continue;

#region Elements Are Assembled
if (!fabricationPart.AssemblyInstanceId.IsNull())
{
Console.Beep();
AssemblyPassword assemblyPasswordForm = new AssemblyPassword();
assemblyPasswordForm.ShowDialog();

if (assemblyPasswordForm.assemblyPasswordEntry() == "1234" ||
assemblyPasswordForm.assemblyPasswordEntry() == "abcd")
{
}
else
{
FailureMessage failureMessage = new FailureMessage(assemblyLockedFailureId);
failureMessage.SetFailingElement(id);
doc.PostFailure(failureMessage);
}
}
#endregion
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

public UpdaterId GetUpdaterId()
{
UpdaterId id = assemblyLockUpdaterId;
return (id);
}

public ChangePriority GetChangePriority()
{
return ChangePriority.MEPSystems;
}

public string GetUpdaterName()
{
return "Fabrication Assembly Updater";
}

public string GetAdditionalInformation()
{
return "Fabrication Pipe Assembly updater example: checks to make sure Pipe that has been assembled " +
"is not edited.";
}
}
}

Отключить команду
{
[Transaction(TransactionMode.Manual)]
//[Journaling(JournalingMode.NoCommandData)]
public class DisableAssemblyLock : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
var transaction = new Transaction(commandData.Application.ActiveUIDocument.Document, "Disable Assembly Lock");

using (transaction)
{
if (transaction.Start() == TransactionStatus.Started)
{
try
{
UpdaterRegistry.DisableUpdater(new AssemblyLockUpdaterId(commandData.Application.ActiveAddInId));
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return Result.Failed;
}
finally
{
transaction.Commit();
}
}

return Result.Succeeded;
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/762 ... ng-updater
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»