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,我需要管理员用户安装的软件可以被默认用户卸载。

参数PrivilegesRequiredlowest,但问题依旧。

我在一些机器上进行了测试(它们都是 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 的清单。据我所知,PrivilegesRequiredsetting 不会改变这一点。到目前为止,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的版本的主要内容,如果未能解决你的问题,请参考以下文章

innosetup解压进度

1.innosetup怎么将软件安装到指定文件夹?

InnoSetup打包exe安装应用程序,并添加卸载图标 转

InnoSetup - 代码签名证书

软件静默安装参数扫描原理

Inno Setup 可以发送按键和鼠标按键,如果不能,如何使用安装程序来完成?