以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]软加密:关于远程升级后总要输注册码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=73225)

--  作者:乡里出城
--  发布时间:2015/8/14 15:22:00
--  [求助]软加密:关于远程升级后总要输注册码
项目的AfterOpenProject事件加入软加密注册的代码,如帮助里的代码一样,正确没问题,可是现在提的问题主要是,每次远程更新升级时,再打开项目就存在,有些客户端打开项目时要再次输入注册码才能进去,有些客户端则不用输注册就可以进去了,是什么原因。有什么方法解决。想解决,项目只要注册一次就可以了,不管重卸还是升级更新,不需要每次在远程更新升级后,再打开客户端还在输入注册码才能进去。
[此贴子已经被作者于2015/8/14 15:23:32编辑过]

--  作者:大红袍
--  发布时间:2015/8/14 15:54:00
--  

方法一:把注册码存储到注册表那里去,不要用saveConfigValue

 

http://www.foxtable.com/help/topics/2051.htm

 

方法二:用一个txt文件夹存放注册码信息,不要用saveConfigValue

 

ReadAllText 读取文本文件的内容
WriteAllText 向文本文件中写入内容


--  作者:乡里出城
--  发布时间:2015/8/14 15:58:00
--  
但安全性是不是不如saveConfigValue了
--  作者:大红袍
--  发布时间:2015/8/14 16:22:00
--  
以下是引用乡里出城在2015/8/14 15:58:00的发言:
但安全性是不是不如saveConfigValue了

 

保存的是激活码。

 

没有什么安全不安全的。激活码泄露又没有什么用。


--  作者:乡里出城
--  发布时间:2015/8/17 16:45:00
--  

我按你的那种方式改了好几天,但改不对,大红袍能帮我一下吗,应该怎么样才能更改第二种方法那里,以下是我的没改的原码


Dim n As Integer = GetConfigValue("Count",1)

Dim Code As String = GetConfigValue("Register" & ComputerId,"")

Dim sss As String

Try

    sss = DecryptText(Code,"abc","abc")

Catch ex As Exception

End Try

Dim Ok As Boolean

If Code > "" AndAlso sss = ComputerId Then \'如果注册码正确

    OK = True

Else

    If n > 0 Then

        Forms("注册").Open()

        Code = GetConfigValue("Register" & ComputerId,"")

        Try

            sss = DecryptText(Code,"abc","abc")

        Catch ex As Exception

        End Try

       

        If Code > "" AndAlso sss = ComputerId Then \'如果注册码正确

            OK = True

        End If

    End If

    If n > 0 AndAlso Ok = False Then

        Messagebox.Show("您正在使用的产品已经超出试用次数!")

        Syscmd.Project.Exit()

    End If

End If

n = n + 1

SaveConfigValue("Count",n)



--  作者:大红袍
--  发布时间:2015/8/17 16:55:00
--  

Dim str As String = FileSys.ReadAllText(ProjectPath & "config.txt")

Dim n As Integer = GetConfigValue("Count",1)

Dim Code As String = str

Dim sss As String

Try
   
    sss = DecryptText(Code,"abc","abc")
   
Catch ex As Exception
   
End Try

Dim Ok As Boolean

If Code > "" AndAlso sss = ComputerId Then \'如果注册码正确
   
    OK = True
   
Else
   
    If n > 0 Then
       
        Forms("注册").Open() \'
        \'FileSys.WriteAllText(ProjectPath & "config.txt", "123456789注册码", False)
       
        Code = FileSys.ReadAllText(ProjectPath & "config.txt")
       
        Try
           
            sss = DecryptText(Code,"abc","abc")
           
        Catch ex As Exception
           
        End Try
       
       
       
        If Code > "" AndAlso sss = ComputerId Then \'如果注册码正确
           
            OK = True
           
        End If
       
    End If
   
    If n > 0 AndAlso Ok = False Then
       
        Messagebox.Show("您正在使用的产品已经超出试用次数!")
       
        Syscmd.Project.Exit()
       
    End If
   
End If

n = n + 1


SaveConfigValue("Count",n)

 


--  作者:乡里出城
--  发布时间:2015/8/24 10:50:00
--  
  If n > 0 Then
        
        Forms("注册").Open() \'     
  \'FileSys.WriteAllText(ProjectPath & "config.txt", "123456789注册码", False)

关于上面红色我改在这样,你看正确不

  If n > 0 Then
        
        Forms("注册").Open() \'
        Dim zcm As String = Forms("注册").Controls("TextBox2").Value
        
        FileSys.WriteAllText(ProjectPath & "config.txt", "zcm", False)


另外又出现以下这个问题,我在发布的时候添加了空白的config.txt,与Project文件同属一个文件夹,可是你上面的代码却是ProjectPath,就出现以下问题
 .NET Framework 版本:2.0.50727.3053
Foxtable 版本:2014.11.11.1
错误所在事件:项目,AfterOpenProject
详细错误信息:
Could not find file \'D:\\ctpt\\project\\config.txt\'


下面这样修改可以吗

If n > 0 Then
        
        Forms("注册").Open() \'
        Dim zcm As String = Forms("注册").Controls("TextBox2").Value
        
        FileSys.WriteAllText("D:\\ctpt\\project\\config.txt", "zcm", False)



[此贴子已经被作者于2015/8/24 11:08:55编辑过]

--  作者:大红袍
--  发布时间:2015/8/24 11:14:00
--  

 

[此贴子已经被作者于2015/8/24 11:15:05编辑过]

--  作者:大红袍
--  发布时间:2015/8/24 11:16:00
--  

1、你的项目要有config.txt文件;

 

2、你要在注册窗口的确定按钮,就往txt文件写入内容,才能继续下面的代码。

 

Dim zcm As String = Forms("注册").Controls("TextBox2").Value
FileSys.WriteAllText(ProjectPath & "config.txt", zcm, False)


--  作者:乡里出城
--  发布时间:2015/8/24 11:30:00
--  
我觉得真的还不如用回写入注册表的方法,可是写在注册表的代码,为什么有些电脑再更新后不用再输入注册码,有时还是需要输入,以下是我的代码


Dim Count As Integer

Count = Registry.GetValue("HKEY_CURRENT_USER\\Software\\MyApp","Count",0)

Dim Code As String = GetConfigValue("Register" & ComputerId,"")

Dim sss As String

Try

    sss = DecryptText(Code,"abc","abc")

Catch ex As Exception

End Try

Dim Ok As Boolean

If Code > "" AndAlso sss = ComputerId Then \'如果注册码正确

    OK = True

Else

    If Count >= 0 Then

        Forms("注册").Open()

        Code = GetConfigValue("Register" & ComputerId,"")

        Try

            sss = DecryptText(Code,"abc","abc")

        Catch ex As Exception

        End Try

       

        If Code > "" AndAlso sss = ComputerId Then \'如果注册码正确

            OK = True

        End If

    End If

    If Count >= 0 AndAlso Ok = False Then

        Messagebox.Show("您正在使用的产品需要先正确注册!")

        Syscmd.Project.Exit()

    End If

End If

Registry.SetValue("HKEY_CURRENT_USER\\Software\\MyApp","Count",Count + 1)


请问哪里不正确了

[此贴子已经被作者于2015/8/24 11:35:31编辑过]