Наиболее компактный и оптимизированный способ переписать ваш код, который я могу себе представить, заключается в следующем:
let usersCount = 23;
let rounded;
let x = 10 ** (usersCount.toString().length - 1);
rounded = Math.floor(usersCount / x) * x;
Он должен работать рекурсивно без ограничений, как вы и просили.
Необходимо использовать Тепло (WIX 3.0), расположенный в каталоге bin версии, которую Вы используете. Взгляните на этот сообщение блога , мы используем его здесь для регистрации всех наших COM-объектов путем создания wix фрагмента...
что-то как
heat file MyComExposedLibrary.dll -out MyComExposedLibrary.wxs
После, читая Ваше редактирование, я создал бы основной msi с wix, который устанавливает com, возражают только, видят, работает ли это... затем, Вы будете знать который поле битвы напасть...
Для извлечения информации COM масло будет использовать инструмент regasm.exe включенный с платформой.NET. Вероятно, что Visual Studio использует тот же инструмент для регистрации блоков при включении "регистра для взаимодействующего с COM".
различие - то, что масло будет использовать regasm/regfile, переключаются для отправки информации в .reg файл вместо того, чтобы на самом деле регистрировать блок. К сожалению, .reg файл, сгенерированный regasm.exe, не завершен. Это пропускает typelib записи, которые это действительно пишет в реестр во время реальной регистрации. Это может быть ошибкой в regasm.
Для получения установщика, работающего Вас, имеют три опции:
Добавляют недостающие ключи реестра к производству масла вручную. Производство масла предназначается, чтобы быть отредактированным вручную и сохраненным наряду с Вашими другими wxs файлами так или иначе. Вы, кажется, пробуете к полностью, автоматически генерируют работу wxs файл, но я полагаю, что это никогда не было целью дизайна масла.
Использование пользовательское действие для вызова regasm из установщика. Это является немного злым, потому что можно потерять некоторые сильные транзакционные гарантии, обеспеченные механизмом установщика Windows. Я думаю об откатах, инициированных отказом на полпути во время установки здесь.
Избегают регистрации в целом путем использования COM без регистрации. Это потребует создания файлов манифеста и для приложения и для библиотеки COM.
Недавно я столкнулся с этой проблемой, и простейший обходной путь, который я смог найти, состоит в следующих шагах на машине разработки:
MyDll-2.wxs содержит элемент
, который вы хотите скопировать и вложить в элемент
, созданный в MyDll-1.wxs. Это даст вам полный элемент
, который вы можете использовать в проекте установщика.