Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inno setup Inno安装和游戏浏览器(GAMEUX)_Inno Setup - Fatal编程技术网

Inno setup Inno安装和游戏浏览器(GAMEUX)

Inno setup Inno安装和游戏浏览器(GAMEUX),inno-setup,Inno Setup,我正在尝试使用innosetup将我的游戏添加到GE,我正在使用以下脚本(仅代码): [代码] 类型TGUID=记录数据1:基数;数据2,数据3:单词;Data4:字符的数组[0..8];结束; const PlayTask=0; 支持任务=1; var GameuxGUID:TGUID; 函数GenerateGUID(变量GUID:TGUID):基数;外部的GenerateGUID@files:GameuxInstallHelper.dll stdcall setuponly'; 函数AddT

我正在尝试使用innosetup将我的游戏添加到GE,我正在使用以下脚本(仅代码):

[代码]
类型TGUID=记录数据1:基数;数据2,数据3:单词;Data4:字符的数组[0..8];结束;
const PlayTask=0;
支持任务=1;
var GameuxGUID:TGUID;
函数GenerateGUID(变量GUID:TGUID):基数;外部的GenerateGUID@files:GameuxInstallHelper.dll stdcall setuponly';
函数AddToGameExplorer(二进制:字符串;路径:字符串;安装类型:整数;变量GUID:TGUID):基数;外部的AddToGameExplorerA@files:GameuxInstallHelper.dll stdcall setuponly';
函数CreateTask(InstallType:Integer;变量GUID:TGUID;TaskType:Integer;TaskNumber:Integer;TaskName:String;Binary:String;Parameters:String):基数;外部的CreateTaskA@files:GameuxInstallHelper.dll stdcall setuponly';
函数RetrieveGUIDForApplication(二进制:字符串;变量GUID:TGUID):基数;外部“RetrieveGUIDForApplicationA@{app}\installer\GameuxInstallHelper.dll stdcall uninstallonly”;
函数RemoveFromGameExplorer(变量GUID:TGUID):基数;外部“RemoveFromGameExplorer@{app}\installer\GameuxInstallHelper.dll stdcall uninstallonly”;
函数RemoveTasks(var-GUID:TGUID):基数;外部“RemoveTasks@{app}\installer\GameuxInstallHelper.dll stdcall uninstallonly”;
函数IntToHex(Int:Cardinal;Digits:Integer):字符串;变量i,数字:整数;ch:字节;
开始
结果:='';
对于i:=0到数字-1 do
开始
数字:=整数模16;
Int:=Int div 16;
如果是数字9那么
ch:=ch+7;
结果:=chr(ch)+结果;
结束;
结束;
函数GetGUID(GGUID:TGUID):字符串;varⅠ:整数;
开始
结果:='{'+IntToHex(GGUID.Data1,8)+'-'+IntToHex(GGUID.Data2,4)+'-'+IntToHex(GGUID.Data3,4)+'-'+IntToHex(Ord(GGUID.Data4[0]),2)+IntToHex(Ord(GGUID.Data4[1]),2)+'-';
对于i:=2到7,do result:=result+IntToHex(Ord(GGUID.Data4[i]),2);result:=result+'}';
结束;
过程GDFInstall(二进制,MainExe:String);
开始
GenerateGUID(GameuxGUID);
AddToGameExplorer(ExpandConstant(二进制),ExpandConstant({app}'),3,GameuxGUID);
CreateTask(3,GameuxGUID,PlayStask,0,'Play',ExpandConstant(MainExe),'';
结束;
**程序win7fix;**
var regGDF:基数;
开始
如果RegQueryWordValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows\CurrentVersion\GameUX\Games\'+GetGUID(GameuxGUID),'IsSigned',regGDF),则
如果regGDF=0,则
如果RegDeleteValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows\CurrentVersion\GameUX\Games\'+GetGUID(GameuxGUID),'IsSigned'),则
RegWriteDWordValue(HKEY_LOCAL_机器,'SOFTWARE\Microsoft\Windows\CurrentVersion\GameUX\Games\'+GetGUID(GameuxGUID),'IsSigned',1);
结束;
过程CurStepChanged(CurStep:TSetupStep);
var版本:TWindowsVersion;
开始
GetWindowsVersionEx(版本);
如果(CurStep=ssPostInstall)和Version.NTPlatform和(Version.Major>5),则开始
GDFInstall({{GDFBinary},{{GDFExe}');
win7fix;
结束;
结束;
但是“win7fix”过程不起作用。 这适用于windows 7,因为如果我创建自己的GDF定义dll文件,它不会被签名,并且游戏浏览器不会显示一些信息,例如评级。 但是如果我从0到1手动编辑注册表项“issigned”,它会显示。
如何使用inno为生成的guid自动编辑此(dword)条目?

问题的根源在于您试图在Win7x64上读写注册表的32位树,但是GameuxInstallHelper.dll会将游戏信息写入64位树。 我在项目中使用了您的过程代码,如下所示:

procedure win7fix;
  var regGDF: Cardinal;
  var GUXPath: string;
begin
GUXPath := 'Software\Microsoft\Windows\CurrentVersion\GameUX\Games\' + GetGUID(GameuxGUID);
  if isWin64 then
  begin
    if RegQueryDWordValue(HKLM64, GUXPath, 'IsSigned', regGDF) then
      if regGDF=0 then
        if RegDeleteValue(HKLM64, GUXPath, 'IsSigned') then 
          RegWriteDWordValue(HKLM64, GUXPath, 'IsSigned', 1);
  end
  else
  begin
    if RegQueryDWordValue(HKLM, GUXPath, 'IsSigned', regGDF) then
      if regGDF=0 then
        if RegDeleteValue(HKLM, GUXPath, 'IsSigned') then 
          RegWriteDWordValue(HKLM, GUXPath, 'IsSigned', 1);
  end;
end; 

问题的根源在于,您试图在Win7x64上读取和写入注册表的32位树,但GameuxInstallHelper.dll会将游戏信息写入64位树。 我在项目中使用了您的过程代码,如下所示:

procedure win7fix;
  var regGDF: Cardinal;
  var GUXPath: string;
begin
GUXPath := 'Software\Microsoft\Windows\CurrentVersion\GameUX\Games\' + GetGUID(GameuxGUID);
  if isWin64 then
  begin
    if RegQueryDWordValue(HKLM64, GUXPath, 'IsSigned', regGDF) then
      if regGDF=0 then
        if RegDeleteValue(HKLM64, GUXPath, 'IsSigned') then 
          RegWriteDWordValue(HKLM64, GUXPath, 'IsSigned', 1);
  end
  else
  begin
    if RegQueryDWordValue(HKLM, GUXPath, 'IsSigned', regGDF) then
      if regGDF=0 then
        if RegDeleteValue(HKLM, GUXPath, 'IsSigned') then 
          RegWriteDWordValue(HKLM, GUXPath, 'IsSigned', 1);
  end;
end; 

“不工作”并不能很好地描述您遇到的问题,请详细说明并回答:您确定调用了该函数吗?你有错误吗?如果没有,功能在哪一个ifs中不工作?是,它添加到GE,但注册表没有更改。我不知道这个过程是否正常,我只是需要一个帮助来创建一个正确的过程“win7fix”,它可以写入注册表并编辑游戏guid的IsSigned值。@用户您知道您可以在inno安装编译器程序(gui)中调试iss脚本吗?。如果例程不工作,您可以在开始行中放置一个断点,然后在该点逐步执行,这样您就可以自己找到问题所在。不工作不是对您遇到的问题的良好描述,请详细说明并回答:您确定调用了该函数吗?你有错误吗?如果没有,功能在哪一个ifs中不工作?是,它添加到GE,但注册表没有更改。我不知道这个过程是否正常,我只是需要一个帮助来创建一个正确的过程“win7fix”,它可以写入注册表并编辑游戏guid的IsSigned值。@用户您知道您可以在inno安装编译器程序(gui)中调试iss脚本吗?。如果例程不起作用,您可以在开始行中放置一个断点,然后在该点一步一步地执行,这样您就可以自己找到问题所在。