【问题标题】:Check for the required .NET version with NSIS [duplicate]使用 NSIS 检查所需的 .NET 版本 [重复]
【发布时间】:2011-07-21 21:36:30
【问题描述】:

可能重复:
NSIS installer that checks for .NET Framework

在使用 NSIS 安装过程中,如何确定是否安装了正确的 .Net 版本?

【问题讨论】:

  • 嗨,meffordm。回答您自己的问题很好,但您应该以危险的方式回答。所以实际上提出问题,然后发布答案。只是将答案作为问题发布是违反网站礼仪的。 Etiquette for answering your own question
  • SO 不是此类代码的正确位置,请将其发布在 NSIS wiki 上。此外,仅检查 NDP 密钥并不能涵盖所有 .net 版本...
  • @Matt Ellen - 谢谢马特。我发了这个之后就想到了。
  • @Anders - 我试图把它贴在那里,但我不知道如何在他们的 wiki 上创建一个新页面。也许如果这个周末我有时间我会照顾它。另外,我认为 NDP 密钥涵盖了所有内容。我还应该去哪里看?
  • @Anders - 我在this MSDN page 上发现 NDP 密钥涵盖了其中的大部分。它还说明了如何确定是否安装了任何当前和以前的版本。现在我只需要实现这些更改。感谢您的提醒。

标签: .net installation nsis


【解决方案1】:

在使用 NSIS 安装 .EXE 时,我找到了一些检查所需 .NET Framework 版本的方法,但它们要么对我不起作用,要么过于复杂。所以,我写了一个,或者我在 NSIS wiki 上找到了一个经过大量修改的。如果需要,任何人都可以使用它。如果它需要一些工作,请告诉我,以便我们保持更新。谢谢。

/*
 * Name: CheckDotNetFramework.nsh
 * Version: 0.1
 * Date: 20110720
 *
 * Author: Michael Mefford
 * Contact info: meffordm@gmail.com
 *
 * Description: NSIS header file to check a windows system for a specified .NET
 *              framework.  CheckDotNetFramework.nsh uses the NSIS stack to
 *              receive and pass values.
 *
 * Modified from: http://nsis.sourceforge.net/How_to_Detect_any_.NET_Framework
 *
 * License: Copyright (C) 2011  Michael Mefford
 *
 *          This software is provided 'as-is', without any express or implied
 *          warranty. In no event will the author(s) be held liable for any
 *          damages arising from the use of this software.
 *
 *          Permission is granted to anyone to use this software for any
 *          purpose, including commercial applications, and to alter it and
 *          redistribute it freely, subject to the following restrictions:
 *
 *             1. The origin of this software must not be misrepresented;
 *                you must not claim that you wrote the original software.
 *                If you use this software in a product, an acknowledgment in
 *                the product documentation would be appreciated but is not
 *                required.
 *
 *             2. Altered versions must be plainly marked as such,
 *                and must not be misrepresented as being the original software.
 *
 *             3. This notice may not be removed or altered from any
 *                distribution.
 *
 * Usage: Push ${DotNetFrameworkVersion}
 *        Call CheckDotNetFramework
 *        Exch $R0
 *        StrCmp $R0 "0" found not_found
 *
 * Algorithm: ...
 *
 * Input: A .NET Framework version.  This must be verbatim, including major,
 *        minor, and build version - i.e.
 *
 *          1.1.4322
 *          2.0.50727
 *          3.0
 *          3.5
 *          4
 *          4.0
 *          .
 *          .
 *          .
 *          etc.
 *
 * Output: "0" if the requested .Net Framework version IS FOUND
 *         "1" if the requested .NET Framework version IS NOT FOUND
 *
 */

Function CheckDotNetFramework

  /* Exchange $R0 with the top of the stack to get the value passed by caller */
  Exch $R0

  /* Save other NSIS registers */
  Push $R1
  Push $R2
  Push $R3

  /* Zero out $R2 for the indexer */
  StrCpy $R2 "0"

loop:
  /* Get each sub key under "SOFTWARE\Microsoft\NET Framework Setup\NDP" */
  EnumRegKey $R1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP" $R3
  StrCmp $R1 "" version_not_found  /* Requested version is not found */

  StrCpy $R2 $R1 "" 1              /* Remove "v" from subkey */
  StrCmp $R2 $R0 version_found     /* Requested version is found */

  IntOp $R3 $R3 + 1                /* Increment registry key index */
  Goto loop

/* The requested .Net Framework version WAS NOT FOUND on this system */
version_not_found:
  /* Restore the registers saved earlier */
  Pop $R3
  Pop $R2
  Pop $R1
  Pop $R0

  Push "1"  /* Put "1" on the top of the stack for caller to use */
  Goto end

/* The requested .Net Framework version WAS FOUND on this system */
version_found:
  /* Restore the registers saved earlier */
  Pop $R3
  Pop $R2
  Pop $R1
  Pop $R0

  Push "0"  /* Put "0" on the top of the stack for caller to use */

end:

FunctionEnd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 2022-10-12
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    相关资源
    最近更新 更多