Что ж, если ваша цель - встроить идентификатор клиента (электронная почта, код и т. Д.) В exe, самый простой способ, о котором я могу подумать, это использовать IPropertyStorage и IPropertySetStorage интерфейсы.Если вы чувствуете себя смелым, вы можете вызывать методы непосредственно в IPropertySetStorage через p / invoke , или вы можете пойти простым путем и использовать подготовленную оболочку COM Microsoft, которая называется dsofile.dll .
Обратите внимание, что, хотя dsofile предназначен для офисных документов, он действительно работает с любым файлом - включая файлы .exe - вы просто застряли с предопределенными именами свойств.Почему бы не бросить свой идентификатор клиента во что-то вроде свойства .Comments.Просто сделайте это так, чтобы вы могли разобрать его снова.
Вот пример:
var doc = new OleDocumentPropertiesClass();
doc.Open(pathToFile);
doc.SummaryProperties.Comments = "joe@test.com";
doc.Save();
Конечно, вам сначала нужно скопировать его во временную папку, и некоторыечерез некоторое время после того, как пользователь загрузит его, вы захотите удалить его.
Вы можете связать dsofile.dll с вашим приложением и зарегистрировать его как зависимость и использовать его в своем установщике для считывания свойства обратно.Или, если вы можете p / вызвать IPropertyStorage без него, у вас не будет зависимости.
Другая вещь, на которую стоит обратить внимание, - это использование расширенных свойств файла, которые считываются Shell32.dll.Я просто не смог найти чистый способ написать их легко.Если вы идете по этому пути, пожалуйста, поделитесь, как вы записали свойства в свой .exe.