Inno设置:重新登记注册表配置单元

时间:2017-08-03 14:14:02

标签: registry inno-setup dllregistration

想知道是否有一些我不知道的方法,因为Inno Setup重定向了hive常量。更具体地说,是在写入注册表之前调用此函数的能力:RegOverridePredefKey

为了提供一点背景知识,在我的情况下,这将是强制自注册DLL注册当前用户(可能没有管理员凭据)而不是全局注册的首选方法。 (换句话说,写入HKEY_CURRENT_USER\Software\Classes而不是HKCR。)没有找到任何其他有助于此的Inno Setup构造,我会避免使用3rd party tools,这也会如果可能,需要更新。

1 个答案:

答案 0 :(得分:0)

不,Inno Setup不支持此功能。

但从Pascal Scripting调用它并不困难。

虽然请注意您无法使用RegOverridePredefKeynamespace SMSSender.Repositories { public class SenderRepository : ISenderRepository { private SMSEntities entities; private ILog logger; public SenderRepository(SMSEntities entities, ILog logger) { this.entities = entities; this.logger = logger; } public IEnumerable<SMSMessage> GetUnSentMessages() { return entities.SMSMessage.AsNoTracking().Where(item => item.TimeSent == null && item.Deleted == 0 && item.StatusID == 0).AsNoTracking().ToList(); } public void UpdateMessageStatus(int messageId, string mobileNo, short status) { var message = entities.SMSMessage.AsNoTracking().Where(item => item.MessageID == messageId && item.MobileNo == mobileNo).FirstOrDefault(); if (message != null) { message.StatusID = status; message.TimeSent = DateTime.Now; entities.Set<SMSMessage>().AddOrUpdate(message); entities.SaveChanges(); } } } } 重定向到HKEY_LOCAL_MACHINE。您只能将其重定向到子项:

  

hNewHKey:...打开注册表项的句柄。此句柄由HKEY_CURRENT_USERRegCreateKeyEx函数返回。 它不能是预定义的键之一。

因此,在注册DLL之后,您必须将子项复制到RegOpenKeyEx并将其删除(如HKEY_CURRENT_USER建议的文档所示)。

重定向到临时子项的基本代码:

RegOverridePredefKey

添加一些错误处理!

该代码适用于Inno Setup的Unicode版本。

对于复制部分,您可以从Specify the registry uninstall key location/hive via [Code]重用(并改进)我的代码。