我用setup factory 打包 要如何才能写如注册表

时间:2021-06-16 15:38:29
   


       setup factory 要如何才能写如注册表,实现安装在电脑上后只能在本机使用


    复制到其他电脑上不可用

16 个解决方案

#1


如果实现了,那别人得到了安装程序,安装到其他电脑,setup factory 也会在其他电脑写注册表,这样在其他电脑上也可以用了。

不应该用setup factory来做限制。


#2


读一下电脑的CPU或硬盘号,然后在程序中写死,只有这台机子才可以用。

不过VFP程序很容易被反编译或看到源码。
所以即使做到了对硬件加密,前提必须是你的VFP的EXE也必须加密,否则是没用的。

#3


 

 
 
  我要的限制不高,只要求没有安装文件安装的电脑不可用, 并不是只限制在一个电脑上使用 ,


意思是 从用安装过的电脑上复制到别的地方不可用

#4


Setup Factory 7 注册表实例

*-----------------------------

SF7的注册表操作,以下是一个例子,主要靠点击各个按钮来进行控制。
主要有:创建键,删除键,创建键值,删除键值,读取注册表信息,判断是否有键值等。


if (e_MsgID == MSGID_CLICKED) then
    -- 点击了控件...
    if (e_CtrlID == CTRL_BUTTON_01) then
        -- 在这里插入按钮控制代码,第一个按钮
        Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Build");
        Dialog.Message("创建", "您创建了一个注册表项!", MB_OK, MB_ICONNONE);
    end
    if (e_CtrlID == CTRL_BUTTON_02) then
        -- 在这里插入按钮控制代码,第二个按钮
        Registry.DeleteKey(HKEY_LOCAL_MACHINE, "Software\\Build");
        Dialog.Message("删除", "您删除了一个注册表项!", MB_OK, MB_ICONNONE);
    end
    if (e_CtrlID == CTRL_BUTTON_03) then
        -- 在这里插入按钮控制代码,第三个按钮
        Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Build", "Key1", "字符串值", REG_SZ);
        Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Build", "Key2", "11 00 11 12", REG_BINARY);
        Dialog.Message("创建键值", "您创建了两个个注册表键值!", MB_OK, MB_ICONNONE);
    end
    if (e_CtrlID == CTRL_BUTTON_04) then
        -- 在这里插入按钮控制代码,第四个按钮
        Registry.DeleteValue(HKEY_LOCAL_MACHINE, "Software\\Build", "Key1");
        Dialog.Message("删除", "您删除了一个注册表键值!", MB_OK, MB_ICONNONE);
    end
    if (e_CtrlID == CTRL_BUTTON_05) then
        -- 在这里插入按钮控制代码,第四个按钮
        RKEY1 = Registry.GetValue(HKEY_LOCAL_MACHINE, "Software\\Build", "Key1", true);
        RKEY2 = Registry.GetValue(HKEY_LOCAL_MACHINE, "Software\\Build", "Key2", true);
        SessionVar.Set("%PATCH1%", RKEY1);
        SessionVar.Set("%PATCH2%", RKEY2);
        -- 获得键值,并存到变量中,注意变量要事先在主界面的“会话变量”添加,也可以使用 Local 定义局部变量
        TKEY1 = Registry.GetValueType(HKEY_LOCAL_MACHINE, "Software\\build", "Key1"); 
        TKEY2 = Registry.GetValueType(HKEY_LOCAL_MACHINE, "Software\\build", "Key2"); 
        SessionVar.Set("%TYPE1%", TKEY1);
        SessionVar.Set("%TYPE2%", TKEY2);
        -- 获得键值类型,并存到变量中,注意变量要事先在主界面的“会话变量”添加,也可以使用 Local 定义局部变量
        Screen.Next();
        Screen.Back(); 
        -- 这两个命令用于快速的闪回前进屏幕,以便让大家看清楚变化
          Dialog.Message("获得键值", "您获得了两个注册表键值和他们的类型!", MB_OK, MB_ICONNONE);
    end
        if (e_CtrlID == CTRL_BUTTON_06) then
        -- 判断是否有一个键值
           BUILD = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "Software\\Build");
              if (BUILD == true) then
              Dialog.Message("注意", "该键值存在", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
              else if (BUILD == false) then
                    Dialog.Message("注意", "没有该键值", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
                    end
              end
    end
end

#5


在左边导航栏中的“屏幕”,在“安装之前”中添加“按钮”项,
然后将代码写到“操作”中的On Ctrl Message中。

#6


           


        
 
           没有更酷一点的方法没吗   
或者也可以利用读取硬盘信息来判断

按装

#7


其实有一个更简单的变通方法:

如安装时将一个特殊的文件,[如“MySign.jhz”(此文件可以用创建一个空白的文本文件,然后改一下名,名你自定了)],
安装到Windows的System32或System目录下,也就是说不将这个文件安装到你程序目录下。

然后每次启动程序时,都检查一下这个文件在不在,如果不在,就提示“程序安装不完全”,然后程序就退出。


但首先要保存你VFP程序要加密好,否则别人很容易通过源码知道你的程序检测这样一个文件。

#8


用什么加密方法好呢 ?? 或者有直接加密的软件

#9


好的加密软件都不是免费的。

个人感觉FoxShell 1.2在免费中还可以,不过只支持VFP9.0 SP1.

#10


程序加密
保护版权,,
你可以作一个系统表 dbf 更名为  sys.ini 只有一条记录 保存 运行次数,cpu号,硬盘号,

运行次数小1时,,取得cpu 号,硬盘号(需要用 API函数取得), 保存起来
以后运行,检查就是了,,

这些的数据也可以保存到注册表里,,VFP 操作注册表,你可以找找以前的帖子,或在baidu上搜索下,有,,

VFP 可以反编译,保密性差,,人家看都看见你的代码了,你还报什么密,保护什么版权啊,

#11


 sys.ini 你要保存在windows 文件下,目录深一点

#12


学习了号方法!

#13


这也能算无满意答案。

1、给出操作注册表,认为麻烦。
2、给出更简单方法,也不满意。

无语了。

#14


我另一贴给过分了; 我没你们懂你们说的我不明白,没解决我的实际问题

所以我在这个帖没有给分 ,不好意思!

#15


在 工程-操作-post install 中加入:
Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Globe");
Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Globe", "GlobePath", strInstallFolderPath .."\\Globe.exe", REG_SZ);

strInstallFolderPath就是存放你选择的安装目录的变量

#16


setup factory 7.0 写注册表, 在安装之后里面,Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", "MySoftWare", "%AppFolder%\\mysql-5.1.6-alpha-win32\\bin\\mysqld-nt.exe", REG_SZ);

"%AppFolder%\\mysql-5.1.6-alpha-win32\\bin\\mysqld-nt.exe",这个路径有问题啊,能写入注册表中的run,但是不能执行。
不报错,但是安装后,注册表中run里面也能写入,但是 键值仍是"%AppFolder%\\mysql-5.1.6-alpha-win32\\bin\\mysqld-nt.exe",%AppFolder%没有转化为实际的安装路径,这是为什么啊???

#1


如果实现了,那别人得到了安装程序,安装到其他电脑,setup factory 也会在其他电脑写注册表,这样在其他电脑上也可以用了。

不应该用setup factory来做限制。


#2


读一下电脑的CPU或硬盘号,然后在程序中写死,只有这台机子才可以用。

不过VFP程序很容易被反编译或看到源码。
所以即使做到了对硬件加密,前提必须是你的VFP的EXE也必须加密,否则是没用的。

#3


 

 
 
  我要的限制不高,只要求没有安装文件安装的电脑不可用, 并不是只限制在一个电脑上使用 ,


意思是 从用安装过的电脑上复制到别的地方不可用

#4


Setup Factory 7 注册表实例

*-----------------------------

SF7的注册表操作,以下是一个例子,主要靠点击各个按钮来进行控制。
主要有:创建键,删除键,创建键值,删除键值,读取注册表信息,判断是否有键值等。


if (e_MsgID == MSGID_CLICKED) then
    -- 点击了控件...
    if (e_CtrlID == CTRL_BUTTON_01) then
        -- 在这里插入按钮控制代码,第一个按钮
        Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Build");
        Dialog.Message("创建", "您创建了一个注册表项!", MB_OK, MB_ICONNONE);
    end
    if (e_CtrlID == CTRL_BUTTON_02) then
        -- 在这里插入按钮控制代码,第二个按钮
        Registry.DeleteKey(HKEY_LOCAL_MACHINE, "Software\\Build");
        Dialog.Message("删除", "您删除了一个注册表项!", MB_OK, MB_ICONNONE);
    end
    if (e_CtrlID == CTRL_BUTTON_03) then
        -- 在这里插入按钮控制代码,第三个按钮
        Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Build", "Key1", "字符串值", REG_SZ);
        Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Build", "Key2", "11 00 11 12", REG_BINARY);
        Dialog.Message("创建键值", "您创建了两个个注册表键值!", MB_OK, MB_ICONNONE);
    end
    if (e_CtrlID == CTRL_BUTTON_04) then
        -- 在这里插入按钮控制代码,第四个按钮
        Registry.DeleteValue(HKEY_LOCAL_MACHINE, "Software\\Build", "Key1");
        Dialog.Message("删除", "您删除了一个注册表键值!", MB_OK, MB_ICONNONE);
    end
    if (e_CtrlID == CTRL_BUTTON_05) then
        -- 在这里插入按钮控制代码,第四个按钮
        RKEY1 = Registry.GetValue(HKEY_LOCAL_MACHINE, "Software\\Build", "Key1", true);
        RKEY2 = Registry.GetValue(HKEY_LOCAL_MACHINE, "Software\\Build", "Key2", true);
        SessionVar.Set("%PATCH1%", RKEY1);
        SessionVar.Set("%PATCH2%", RKEY2);
        -- 获得键值,并存到变量中,注意变量要事先在主界面的“会话变量”添加,也可以使用 Local 定义局部变量
        TKEY1 = Registry.GetValueType(HKEY_LOCAL_MACHINE, "Software\\build", "Key1"); 
        TKEY2 = Registry.GetValueType(HKEY_LOCAL_MACHINE, "Software\\build", "Key2"); 
        SessionVar.Set("%TYPE1%", TKEY1);
        SessionVar.Set("%TYPE2%", TKEY2);
        -- 获得键值类型,并存到变量中,注意变量要事先在主界面的“会话变量”添加,也可以使用 Local 定义局部变量
        Screen.Next();
        Screen.Back(); 
        -- 这两个命令用于快速的闪回前进屏幕,以便让大家看清楚变化
          Dialog.Message("获得键值", "您获得了两个注册表键值和他们的类型!", MB_OK, MB_ICONNONE);
    end
        if (e_CtrlID == CTRL_BUTTON_06) then
        -- 判断是否有一个键值
           BUILD = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "Software\\Build");
              if (BUILD == true) then
              Dialog.Message("注意", "该键值存在", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
              else if (BUILD == false) then
                    Dialog.Message("注意", "没有该键值", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
                    end
              end
    end
end

#5


在左边导航栏中的“屏幕”,在“安装之前”中添加“按钮”项,
然后将代码写到“操作”中的On Ctrl Message中。

#6


           


        
 
           没有更酷一点的方法没吗   
或者也可以利用读取硬盘信息来判断

按装

#7


其实有一个更简单的变通方法:

如安装时将一个特殊的文件,[如“MySign.jhz”(此文件可以用创建一个空白的文本文件,然后改一下名,名你自定了)],
安装到Windows的System32或System目录下,也就是说不将这个文件安装到你程序目录下。

然后每次启动程序时,都检查一下这个文件在不在,如果不在,就提示“程序安装不完全”,然后程序就退出。


但首先要保存你VFP程序要加密好,否则别人很容易通过源码知道你的程序检测这样一个文件。

#8


用什么加密方法好呢 ?? 或者有直接加密的软件

#9


好的加密软件都不是免费的。

个人感觉FoxShell 1.2在免费中还可以,不过只支持VFP9.0 SP1.

#10


程序加密
保护版权,,
你可以作一个系统表 dbf 更名为  sys.ini 只有一条记录 保存 运行次数,cpu号,硬盘号,

运行次数小1时,,取得cpu 号,硬盘号(需要用 API函数取得), 保存起来
以后运行,检查就是了,,

这些的数据也可以保存到注册表里,,VFP 操作注册表,你可以找找以前的帖子,或在baidu上搜索下,有,,

VFP 可以反编译,保密性差,,人家看都看见你的代码了,你还报什么密,保护什么版权啊,

#11


 sys.ini 你要保存在windows 文件下,目录深一点

#12


学习了号方法!

#13


这也能算无满意答案。

1、给出操作注册表,认为麻烦。
2、给出更简单方法,也不满意。

无语了。

#14


我另一贴给过分了; 我没你们懂你们说的我不明白,没解决我的实际问题

所以我在这个帖没有给分 ,不好意思!

#15


在 工程-操作-post install 中加入:
Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Globe");
Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Globe", "GlobePath", strInstallFolderPath .."\\Globe.exe", REG_SZ);

strInstallFolderPath就是存放你选择的安装目录的变量

#16


setup factory 7.0 写注册表, 在安装之后里面,Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", "MySoftWare", "%AppFolder%\\mysql-5.1.6-alpha-win32\\bin\\mysqld-nt.exe", REG_SZ);

"%AppFolder%\\mysql-5.1.6-alpha-win32\\bin\\mysqld-nt.exe",这个路径有问题啊,能写入注册表中的run,但是不能执行。
不报错,但是安装后,注册表中run里面也能写入,但是 键值仍是"%AppFolder%\\mysql-5.1.6-alpha-win32\\bin\\mysqld-nt.exe",%AppFolder%没有转化为实际的安装路径,这是为什么啊???