innosetup 如何判断用户机器上已经安装的sqlserver2005的版本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了innosetup 如何判断用户机器上已经安装的sqlserver2005的版本相关的知识,希望对你有一定的参考价值。
参考技术A 在cmd窗口输入sqlcmd看看有无反应,如提示不是系统命令,应该就没安装追问安装了sqlserverExpress2005 版本,目前已经知道怎样判断版本问题了,就是不知道如何用 innosetup 连接sqlserverExpress2005数据库,程序代码中连接数据库的字符串为:Data Source=.\SQLEXPRESS;AttachDbFilename=F\data\testdatabase.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True
追答你这个连接字符串 F 后应该有个冒号吧。其他没看出错误来
Inno Setup:无需管理员权限即可卸载
【中文标题】Inno Setup:无需管理员权限即可卸载【英文标题】:Inno Setup: Uninstall without administrator privilege 【发布时间】:2016-01-14 07:58:24 【问题描述】:使用 Inno Setup,我需要管理员用户安装的软件可以被默认用户卸载。
参数PrivilegesRequired
是lowest
,但问题依旧。
我在一些机器上进行了测试(它们都是 Windows 7),在一些机器上我可以使用默认用户卸载,但还有一些机器不允许我卸载并请求管理员用户。
我没有发现问题和互联网搜索中的模式。
安装文件夹为C:\;
我没有使用[Registry]
部分,[Dirs]
部分中的所有参数都使用Permissions: users-modify
。
【问题讨论】:
非管理员没有对 Program Files 文件夹的访问权限,所以如果这是安装程序的地方,那么你就要求不可能。 @MarkRansom:如果安装程序在安装期间更改了权限,这不应该适用,不是吗? 我已经做了一些测试并且它工作了,但是有些机器我无法卸载该软件。软件放在C目录下。 嗯,你是怎么卸载的?通过 InnoSetup 的 unins000.exe 还是通过控制面板?也许有区别 两种方式都卸载了,结果是一样的。 【参考方案1】:有几点需要考虑:
通常,安装文件夹是 %ProgramFiles% 或 %ProgramFiles(x86)%,这是一个受操作系统保护的文件夹。要绕过此保护,安装程序必须更改安装文件夹的权限以允许任何人删除。
在[Dirs] 部分,您可以使用Permissions:users-modify
(如果需要,甚至可以更宽松)。
[Registry] 部分类似。
InnoSetup 使用名为 unins000.exe
的文件进行卸载。该文件包含一个默认请求特权asInvoker
的清单。据我所知,PrivilegesRequired
setting 不会改变这一点。到目前为止,asInvoker
应该没问题。请留意它,以防新版本的 InnoSetup 将其设置为更高。
对于发现此内容但未使用 InnoSetup 的其他访问者:
如果您没有在安装程序中嵌入清单,Windows 将使用heuristics for installer detection (Microsoft, .pptx)。如果启发式结果是肯定的,Windows 将自动请求管理员提升。因此,请使用清单并请求 asInvoker
权限。
【讨论】:
安装文件夹是C:\,我没有使用[Registry]部分,[Dirs]部分的所有参数都使用Permissions: users-modify。 我已经做了一些测试,它可以工作,但是有一些机器我无法卸载软件,所以我认为有一个我没有考虑的风景。 @RobsonPiernodeJesus:这是您应该添加到问题中的重要信息。【参考方案2】:Inno Setup 卸载程序请求权限提升,如果安装程序以管理员或超级用户权限运行(无论它是否需要使用 PrivilegesRequired
明确要求的权限)。
此信息存储在unins000.dat
的字节 14C(十六进制)/322(十进制)中。
这是一个位掩码,其中位 1 (0x01) 表示管理员权限,位 7 (0x40) 表示高级用户权限 [已废弃]。
因此,如果您以管理员/超级用户身份安装应用程序,即使安装程序具有PrivilegesRequired=lowest
,卸载程序也会请求权限提升以获得相同的权限。检查unins000.dat
中的标志,看看是否是这种情况。
另一件事是,在 Windows 10 中,如果您从“设置”应用(而不是从“控制面板”)启动卸载程序,它将始终以管理员权限启动:Workaround for 'Apps & features' in Windows 10 starting a single-user uninstaller elevated
【讨论】:
这些信息是否仍然相关?我检查了我的 unins000.dat 字节 14C 的值为 0x25 (0010 0101)。我将其设置为 0x24 (0010 0100),然后收到 unins000.dat 已损坏的错误消息。我做错了什么? 好的,在 github 上的源代码中找到了缺失的信息 - 我们必须使用计算的 CRC32 或仅设置为 0x11111111(魔术调试值)从字节 444(dec)开始更新 CRC 字节,我做了并且让卸载程序不要求提升。以上是关于innosetup 如何判断用户机器上已经安装的sqlserver2005的版本的主要内容,如果未能解决你的问题,请参考以下文章