Похоже, ваша основная проблема в том, что у вас есть два элемента управления, которые поддерживают один и тот же класс CoClass, но живут по разным путям к файлам. Это не очень хорошая ситуация. Если это вообще возможно, должен быть только один возможный путь к файлу для двоичного файла, который реализует определенный класс COM.
Таким образом, правила контроля версий файлов гарантируют, что установщик MSI установит последний файл. По умолчанию MSI не перезаписывает более новые версии файлов более старыми.
Существуют приложения, в которых есть проблема, из-за которой клиенты должны время от времени использовать более старую версию класса, в то время как более новая версия установлена и доступна. Одно из решений состоит в том, чтобы иметь служебное приложение, которое могут запускать клиенты, которое «укажет» записи реестра COM на правильный двоичный файл.
Определенно существуют проблемы с разрешениями при правильной реализации этого для неадминистративных учетных записей, и вам следует избегать попадания в такую ситуацию, если это вообще возможно.
Если вам абсолютно необходимо иметь несколько двоичных файлов, реализующих один и тот же GUID COM CoClass, и если не слишком поздно менять старые клиенты, вы можете создать мастер-класс «фабрика», который будет принимать любые данные / информацию, доступные от клиента, и выбирать правильная реализация для возврата. Это будет просто класс COM с интерфейсом, в котором есть методы, которые возвращают указатели интерфейса на фактический интерфейс, необходимый клиентам после выделения соответствующего класса реализации и интерфейса запросов для интерфейса клиента.
1012 * редактировать *
Вы можете изменить местоположение вашего приложения с версии на версию (например, «c: \ program files \ My App V2». Это нормально, если вы используете атрибуты кода и версии # и т. Д. Атрибутов ваших пакетов для MSI). заставить MSI удалить все существующие версии вашего приложения перед установкой новых.