如果用户第一次安装我的应用程序,我如何构建我的Inno安装脚本以自动注册dll,但如果有一个以前的版本,则取消注册,然后注册新版本(假设界面不同)?
我目前在我的文件部分使用regserver和忽略reversion标志,如下所示:
[Setup]
...
[Languages]
...
[Files]
Source: "C:\example.dll"; DestDir: "{app}"; Flags: ignoreversion regserver
在我的谷歌搜索中,我找到了Un注册表服务器,但我不知道如何将其添加到我的脚本中。我很乐意开始修补以了解它是如何工作的,但我不想做任何会弄乱我的注册表的事情。
这里有一篇类似的文章,但它没有说明这是如何实际完成的。
编辑
在Pascal中进行了黑客攻击之后,我能够将以下内容添加到[Code]部分,并且它起到了作用。有人知道如何使用{app}常量在下面的代码中动态定义fileName吗?
[Code]
const
fileName = 'C:\Program Files\TFolderName\tigercontroller.dll';
var
serverExists: Boolean;
function InitializeSetup(): Boolean;
begin
serverExists := UnregisterServer(False, fileName, False);
if serverExists then begin
Result:= True;
MsgBox('This will update with the most recent version', mbInformation, mb_Ok);
end else
Result := True;
end;
试试这个,它还处理32/64位并行COM服务器:
function UnregisterCOMServer(sServerCLSID: String): Boolean; var sServerPath: String; Begin Result:=False; //search in HKCR (merged view) if RegQueryStringValue(HKEY_CLASSES_ROOT, 'CLSID\'+sServerCLSID+'\InprocServer32', '', sServerPath) then Begin if sServerPath<>'' then Begin Log('Found COM server CLSID:'+ sServerCLSID +', path:'+sServerPath); Result:=UnregisterServer(False, sServerPath, True); if Result then Log('COM server '+ sServerCLSID +' unregistered.') else Log('UnregisterServer on '+ sServerPath +' failed!'); end else Log('No COM server path found.'); end else Log('COM server CLSID:'+ sServerCLSID +' not found!'+sServerPath);结束;
对文件使用BeforeInstall和AfterInstall参数怎么样?
用法是:
[Files]
Source: "MYDLL.DLL"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall; AfterInstall: MyAfterInstall;
BeforeInstall和AfterInstall函数不能有返回值!
procedure MyBeforeInstall();
begin
// Your code here: If file (old) file exists call UnregisterServer() on old file
// Use function FileExists(const Name: String): Boolean; or similar for it
// Also you can delete the file entirely with function DeleteFile(const FileName: string): Boolean;
// Hint: You can use 'CurrentFileName' variable to get currently processed file
end;
procedure MyAfterInstall();
begin
// Your (new) file was processed and now you can do additional tweaks on it
// 'CurrentFileName' variable is still available
// Setup registers all files with the 'regserver' or 'regtypelib' flags as the last step of installation so in this function the file is still not registered!
end;
在RoomDatabase中创建数据库时,一切工作都很好,并且数据已成功加载,但是,我需要更新服务中生成的数据,问题是它需要下一行中的活动上下文: Dao接口: 存储库: 服务: 我希望服务在LiveData列表中执行、保存和刷新新结果,但我不能声明LiveData列表。
问题内容: 我有一个宠物项目,它是一个在线游戏,整个游戏引擎都是用C#编写的,我想知道是否仍然可以从使用Node.JS构建的解决方案中调用此现有程序集(.dll)的功能。 ,Socket.IO,Express等? 游戏引擎本身非常完整。经过测试且功能强大。我希望有一些简洁的方法来公开其功能,而又不会增加太多开销。 更新 : 稍微回答一下我自己的问题。.我已经结束了构建自己的Web套接字服务器(基于
需要更新时钟小部件的TextView每秒或每分钟变化。 我正在从AppWidgetProvider的onReceive调用服务: 我应该做什么来检查更新的时间,如果有,然后更新‘时间’文本视图… 任何一种都是非常非常非常感谢的
我的Kubernetes集群运行在谷歌云下。我有部署运行端口443和LoadBalancer公开它到互联网。 我是这样创建的: 运行此命令后,loadbalancer将指向部署。现在,我创建了,并希望更改loadbalancer以指向新的部署()。 注意:删除和重新创建部署是释放外部IP地址,我想避免它。 如何在不丢失外部IP的情况下修补现有服务以指向另一个部署?
我一直在阅读《html5rocks服务工作者简介》一文,并创建了一个基本的服务工作者,它可以缓存页面、JS和CSS,并按预期工作: 当我对CSS进行更改时,由于服务人员正在从缓存中正确返回CSS,因此不会拾取此更改。 我陷入困境的地方是,如果我要更改HTML、JS或CSS,我如何确保服务人员可以从服务器加载较新版本,而不是从缓存加载?我曾尝试在CSS导入上使用版本戳,但似乎不起作用。
EXCEL服务器应用表间更新公式 先在《商品表》给“36寸液晶电视”输入“当前库存”为10,保存。然后新建一份《订货单》,并传递完成,如下图所示: 这时,我们再去《商品表》中查看“36寸液晶电视”,发现“预定库存”有 0 变成1了,如下图所示: 表明表间更新公式“更新预定库存”已经被执行了。