标签: pascalscript

Inno Setup:如何观察变量值或写入调试输出?

在Inno Setup中调试时如何查看变量值?如何打印一些东西来调试输出?

谢谢

debugging inno-setup pascalscript

35
推荐指数
1
解决办法
2万
查看次数

仅在需要时使Inno Setup安装程序请求权限提升

如果需要特权提升,Inno Setup安装程序具有可用于控制安装程序启动时的PrivilegesRequired指令.我希望我的安装程序甚至可以为非管理员用户工作(没有问题将我的应用程序安装到用户文件夹,而不是Program Files).所以我设置PrivilegesRequirednone(未记录的值).这使得UAC仅为管理员用户提示弹出,因此他们甚至可以安装到Program Files.没有UAC提示非管理员用户,所以即使他们可以安装应用程序(到用户文件夹).

这有一些缺点:

  • 有些人在他们的计算机上使用不同的管理员和非管理员帐户,通常使用非管理员帐户.通常,在使用非管理员帐户启动安装时,当他们收到UAC提示时,他们会输入管理员帐户的凭据以继续.但这不适用于我的安装程序,因为没有UAC提示.
  • (过于可疑)拥有管理员帐户且想要安装到用户文件夹的人无法在没有(不需要)管理员权限的情况下启动我的安装程序.

是否有一些方法可以在需要时(当用户选择仅由管理员帐户写入的安装文件夹时)使Inno Setup请求权限提升?

我假设在Inno Setup中没有这个设置.但可能有一个程序化的解决方案(Inno Setup Pascal脚本)或某种插件/ DLL.


请注意,即将推出的Inno Setup 6具有对非管理安装模式的内置支持.

privileges uac inno-setup pascalscript elevated-privileges

24
推荐指数
2
解决办法
2万
查看次数

InnoSetup:在[Code]部分获取AppName

我正在使用InnoSetup创建一个安装程序,并在一个[Code]部分中编写一些自定义处理程序.在其中一个处理程序中,我希望能够检索AppName[Setup]部分中定义的(或者,可能是其他参数的值)的值.有没有办法让我这样做?我看过文档,但我没有找到任何可以让我这样做的东西.我们的InnoSetup文件实际上是由我们的构建过程生成的,它将所有程序和程序特定的片段拼接在一起,因此必须在代码中为每个程序定义常量是不方便的.有没有方便的方法呢?

我正在寻找类似的东西

MyString := ExpandConstant('{AppName}');
Run Code Online (Sandbox Code Playgroud)

除了{AppName}不是定义的常数.有没有办法查询该[Setup]部分中定义的参数?

installer inno-setup pascalscript

19
推荐指数
2
解决办法
2万
查看次数

Inno-Setup不允许访问所有注册表项,为什么?

我使用此代码来了解密钥是否存在:

if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Autodesk') then
begin
  MsgBox('Key exists!!', mbInformation, MB_OK);
end;
Run Code Online (Sandbox Code Playgroud)

对于这个例子,它有效,我有消息框,但有了它,它没有:

if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Autodesk\Maya') then
begin
  MsgBox('Key exists!!', mbInformation, MB_OK);
end;
Run Code Online (Sandbox Code Playgroud)

但是"Maya"键存在于我的电脑上.有谁能够帮我 ?

编辑:

实际上,似乎inno-setup不能访问正确的键...例如,使用此代码我列出了所有子键Maya,但是(!)结果是所有子键HKEY_LOCAL_MACHINE\SOFTWARE...

if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'SOFTWARE', Names) then
begin
  S := '';
  for I := 0 to GetArrayLength(Names)-1 do
    S := S + Names[I] + #13#10;
  MsgBox('List of subkeys:'#13#10#13#10 + S, mbInformation, MB_OK);
end;
Run Code Online (Sandbox Code Playgroud)

为什么这个HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node关键?

registry inno-setup pascalscript

17
推荐指数
3
解决办法
1万
查看次数

如果进程在Windows 2008 R2 64bit上运行,如何查看Inno Setup?

我看过以下帖子.我的代码看起来完全相同,但不起作用:
Inno Setup检查运行过程

我从http://www.vincenzo.net/isxkb/index.php?title=PSVince复制了这个例子

但是这个例子也不起作用,即使我改变了这样的代码:

[Code]
function IsModuleLoaded(modulename: AnsiString):  Boolean;
external 'IsModuleLoaded@files:psvince.dll stdcall';
Run Code Online (Sandbox Code Playgroud)

代码总是返回false(程序没有运行,即使它正在运行).在Windows 2008 R2和Windows 7上测试过.

事实上我想检查,如果它tomcat5.exe正在运行.所以我想我不能用AppMutex.

我也看过https://code.google.com/p/psvince/source/detail?r=5
但我找不到有关该DLL兼容性的任何事实.

完整代码:

[Files]
Source: psvince.dll; Flags: dontcopy

[Code]
function IsModuleLoaded(modulename: AnsiString ):  Boolean;
external 'IsModuleLoaded@files:psvince.dll stdcall';

function InitializeSetup(): Boolean;
begin
  if(IsModuleLoaded( 'notepad.exe' )) then
    begin
      MsgBox('Running', mbInformation, MB_OK);
      Result := false;
    end
  else
    begin
      MsgBox('Not running', mbInformation, MB_OK);
      Result := true;
    end
end;
Run Code Online (Sandbox Code Playgroud)

windows inno-setup 32bit-64bit pascalscript

13
推荐指数
3
解决办法
1万
查看次数

来自Unicode Inno Setup的LoadStringFromFile和StringChangeEx(Ansi文件)

我正在尝试更新我的一个脚本以使用Inno Setup的Unicode版本.不幸的是我遇到了一个问题,StringChangeEx期望看到一个unicode String而不是我需要的AnsiString(不匹配的类型).是否有另一种方法可以从Unicode Inno Setup中替换匹配的AnsiStrings?

我正在使用WizardDirValue()以避免必须一直打字ExpandConstant('{app}\'),万一有人想知道为什么.

var
  AnsiData: AnsiString;
begin
  LoadStringFromFile(WizardDirValue() + '\legacyansi.conf', AnsiData)
  { Type mismatch, StringChangeEx expects String which is Unicode }
  StringChangeEx(AnsiData, 'current', 'replace', True);
  SaveStringToFile(WizardDirValue() + '\legacyansi.conf', AnsiData)
end;
Run Code Online (Sandbox Code Playgroud)

unicode inno-setup ansi pascalscript

13
推荐指数
1
解决办法
6455
查看次数

如何使用Inno-setup获取本地IP地址

大家好
我怎样才能使用Inno设置获取用户的本地IP地址?我认为使用win32 api GetIpAddrTable,但目前还不清楚如何进行调整.有人有其他任何方式吗?或者知道怎么做?坦克

delphi winapi inno-setup pascalscript

12
推荐指数
2
解决办法
5811
查看次数

如何在Inno Setup中显示超链接?

我正在我的Inno安装程序安装程序中进行验证,以检查计算机上是否安装了Microsoft更新,如果没有,我会显示一个简单的消息框,告诉用户需要更新,这是消息代码:

MsgBox(
  'Your system requires an update supplied by Microsoft. ' +
  'Please follow this link to install it: ' + 
  'http://www.microsoft.com/downloads/details.aspx?FamilyID=1B0BFB35-C252-43CC-8A2A-6A64D6AC4670&displaylang=en',
  mbInformation, MB_OK);
Run Code Online (Sandbox Code Playgroud)

我想让URL成为网页的超链接,但我无法弄清楚如何在Inno Setup中添加文本作为超链接?

谢谢.

installer inno-setup messagebox hyperlink pascalscript

11
推荐指数
1
解决办法
5430
查看次数

Pascal的正确结构语法如果然后开始结束; (在Inno设置中)

自从我上次在Pascal写作以来已经有20年了.我似乎无法正确使用语言的结构元素,而不是使用begin和end的块.例如,这给我一个编译器错误"标识符预期"

procedure InitializeWizard;
begin
  Log('Initialize Wizard');
  if IsAdminLoggedOn then begin
    SetupUserGroup();
    SomeOtherProcedure();
  else begin (*Identifier Expected*)
    Log('User is not an administrator.');
    msgbox('The current user is not administrator.', mbInformation, MB_OK);
    end  
  end;
end;
Run Code Online (Sandbox Code Playgroud)

当然,如果我删除if then块和begin与它们相关的块,那么一切都OK.

有时我会得到这种语法,并且它可以正常运行,但是在嵌套end块时问题会变得恼怒.

解决这个问题还不够.我想更好地了解如何使用这些块.我显然错过了一个概念.来自C++或C#的东西可能正在从我的另一部分中悄悄进入并弄乱我的理解.我已经阅读了一些关于它的文章,我认为我理解它然后我没有.

delphi pascal inno-setup pascalscript

11
推荐指数
1
解决办法
1万
查看次数

如何在Inno Setup Pascal脚本中检查对象是否为NULL?

我正在使用Inno setup studio编写一个pascal函数,它检查对象是否为null并执行某些操作

到目前为止我有:

XMLDocument.setProperty('SelectionLanguage', 'XPath');
XMLNode := XMLDocument.selectSingleNode(APath);
if (XMLNode=Null) then
begin
//do stuff
End
Else
//do other stuff
End
Run Code Online (Sandbox Code Playgroud)

但我一直在收到invalid variant operation错误.

如何在Inno Setup Pascal脚本代码中检查对象是否为空?

inno-setup pascalscript

9
推荐指数
1
解决办法
7051
查看次数