想知道是否有一些我不知道的方法,因为Inno Setup重定向了hive常量。更具体地说,是在写入注册表之前调用此函数的能力:RegOverridePredefKey。
为了提供一点背景知识,在我的情况下,这将是强制自注册DLL注册当前用户(可能没有管理员凭据)而不是全局注册的首选方法。 (换句话说,写入HKEY_CURRENT_USER\Software\Classes
而不是HKCR
。)没有找到任何其他有助于此的Inno Setup构造,我会避免使用3rd party tools,这也会如果可能,需要更新。
答案 0 :(得分:0)
不,Inno Setup不支持此功能。
但从Pascal Scripting调用它并不困难。
虽然请注意您无法使用RegOverridePredefKey
将namespace 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_USER
或RegCreateKeyEx
函数返回。 它不能是预定义的键之一。
因此,在注册DLL之后,您必须将子项复制到RegOpenKeyEx
并将其删除(如HKEY_CURRENT_USER
建议的文档所示)。
重定向到临时子项的基本代码:
RegOverridePredefKey
添加一些错误处理!
该代码适用于Inno Setup的Unicode版本。
对于复制部分,您可以从Specify the registry uninstall key location/hive via [Code]重用(并改进)我的代码。