|
It is really going to depend on many factors. One version I have pondered on using should I release an application to the general public again, is to use a "battery" type system. (Oppps.. Better run on patent it so that I can wait five years and hit people up for fees )
With the it will simply force the person to "charge" the registration battery when they sign up. This makes a full battery in the program and will function normally until the battery runs out. When it gets low it will have in icon that appears somewhere which if they click on will charge it back up. If it continues to get lower it will start blinking. When the battery is almost died, it will start a popup each time you run the application informing them it needs charged. When it batter dies the program dies until recharged.
This both allows off-line use but with regulation. There would also be an option to keep the battery charged any time there is a network connection thus eliminating any user intervention.
I would also give each installation a unique ID and allow (x) installs per purchase. When they are charging the system, it will pass that ID to the server that will verify they are a legal user. If not, or the number of times it is charged (if you allow two machines then in a battery time span it would allow two recharges), if more charges have been used than allowed or it is an invalid code it would not charge.
All this is a simple way to protect software. BUT (yes there is always one of those), if you are writing an application in C#, unless you have a very good scrambler, some smart person will just decompile your program and diconnect the battery.
This is one of the reasons companies like Microsoft are now trying to force everyone into a hardware key so that hacked version can be detected. I have one rule when it comes to copy protection, "If man created, man can break it". You can never make an application safe you can only keep honest people honest.
Another way to cut down on piracy is to put out lots of updates. If a hacked version it detected in an update, they program no longer works.
Rocky Moore <><
|
|
|
|
|
Bog wrote:
Hey I was wondering- why don't software developers (desktop software) not just make the desktop application communicate with a web site every now and then, sending the user's IP address and registration key? That way if someone installed a pirated copy, the company would know. I never see any companies do that. Is there like a law against that or something? (As long as it's in the license agreement of course..)
Let's suppose it's legal for a moment.
What if my ISP uses dynamic IPs, like DHCP? How would you distinguish multiple pirate users x one user copy with dynamic IP?
Ok, suppose that you don't use the IP to identify the user, you use the MAC Address of the network card, and suppose it has not been tampered. Suppose everything is just right.
What would you do? How will you make the user register the software?
Send him a scary letter? How will you physically locate the pirate guys, without spending lots of money on the court?
Spend some thousand dollars on lawyers to recover a few bucks on a shareware proggie?
Hire some bad guys with guns and dogs to break the pirate's house and destroy his computer? (I admit it, this is appealing.)
Kant wrote:
Actually she replied back to me "You shouldn't fix the bug. You should kill it"
|
|
|
|
|
Look I'm not talking about whips and chains level security. All I'm saying is, it's a psycological thing. If you're a computer programmer you know better, but most people aren't. Most people when they find out that the app communicates with my site will think twice about using a cracked copy.
And by the way if a user's ip is dynamic, the isp can still find out which user was on that ip at that time from their logs. But that's not even what I'm proposing. I'm only talking about psychological effect. I'm not even talking about actually suing people. I'm not talking about this as a 100% secure solution to software piracy. I'm sure you're aware there is no 100% secure solution. All we poor programmers are left to do is to try our best and do what we can.
It's like if I proposed using a padlock and a fence to protect my driveway and you say "What if people just use wire cutters?" Does that mean my driveway is no more secure with a fence than without? It's not binary, buddy, it's not "secure or insecure", it's "more secure or less secure".
Besides, it doesn't take much time to code. It's like an 8 minute job.
"Outside of a dog, a book is Man’s best friend. And inside of a dog, it’s too dark to read."
-Groucho Marx
|
|
|
|
|
just a test
"Outside of a dog, a book is Man’s best friend. And inside of a dog, it’s too dark to read."
-Groucho Marx
|
|
|
|
|
I am having some difficulty adding a member to a directory group
object that has 1,000 or more members already in it. For
example, if I have a group object with 1,300 existing
members in it, and I attempt to add another member, my
list of members is truncated to 1,001. Since I am using a
Windows 2000 directory server, I assume it's related to
the 1,000 per page issue. It works just fine if there are less
than 1,000 members in the group.
Here is the code I am using to add the member:
*****************BEGIN CODE********************
string AdsPath
= "LDAP://CN=GroupObject,DC=DomainA,DC=CorpA,DC=COM";
// bind
DirectoryEntry de = new DirectoryEntry(AdsPath);
// add member
de.Properties["member"].Add("CN=user,DC=DomainA,DC=CorpA,DC=com");
// commit
de.CommitChanges();
de.Close()
******************END CODE********************
Thanks in advance for your help. 
|
|
|
|
|
Is it possible to save the Data of a DataTable DefaultView to a XML File? I mean I want to save the Content of the DataView, not the Structure of the DataTable to XML. Is there a Methode?
Thanks
Stefan
|
|
|
|
|
I've tried to use the crystal reports with .NET .
There was a message to register. I've filled in the codes which were accepted.
Afterward using Crystal Reports was not possible: Message was "Invalid key". I've search everything but didn't find a place where to refill these codes. So where can I reenter or change this codes?
Thanks
Stefan
|
|
|
|
|
These two sites should help you. Quickly though you need to look into the merge module properties. If you dont know what that means, below is your answer:
http://support.crystaldecisions.com/library/kbase/articles/c2013175.asp
http://support.crystaldecisions.com/communityCS/TechnicalPapers/crnet_deployment.pdf
|
|
|
|
|
|
When deploying your project, you should add some components to your project, and for one of them, you should select it and look in properties window, there is (as I remember) a licence key property, that can be filled with one that you can see in about screen of your installed .Net environment.
I hope this helps!
Regards
Don't forget, that's <font color="blue">" Persian Gulf "</font> not Arabian gulf!
|
|
|
|
|
Thank you all for your answers!
Your answers are focused on Application Deployment but I want to use Crystal Reports in .NET while developing the project (otherwise I couldn't set the enviroment for the Crystal Report).
I just wanted to know how I can change the registration key for the project I'm on now. Is this not possible? Is it really need to make a deploying project?
The situation now is that when I "Add New Item", Crystal Report, a message comes up "Invalid Key". Then I can't do anything in the report. The Crystal Report worked before I've entered the registration key, so I think I misstyped it and want now to recheck and reenter this code.
Please answer this.
Stefan
|
|
|
|
|
I'm using an academic version of C#. I tried to use System.Web,
but Web is not in the dropdown.
I'm running on a Windows 2000 server.
I've installed Server patch #3
I've installed ASP 1.1
I've done a full install of Visual Studio.Net.
I can't seem to find the class template for System.Web.
Does anyone have an idea of what I might have done wrong.
Appreciate any help!
Tom
|
|
|
|
|
In your project:
Project-> AddReference
On the Tav .NET find and select System.Web.dll
Press OK.
|
|
|
|
|
I’ve got a treeview control on a windows form and the treeview is already populated. Is their a way to traverse through the tree looking for a node with certain text, then remove that node when the matched node with the text is found? I’m passing in the string text of the node I want to delete from another form, the tree is located on the parent form.
The tree looks like this. I want to delete Smith when it's passed in from the other form.
Employee
Johnson
Smith
Employee Location
Boston
Seattle
If this is possible any help would be greatly appreciated.
The code below won’t work since I don’t want to select the node manually.
TreeNode tn = treeView1.SelectedNode;
treeView1.Nodes.Remove(tn);
|
|
|
|
|
Just use a for loop to traverse the tree, inside the for loop check the text value of the node.
-Nick Parker
|
|
|
|
|
Hi All,
I wrote a WinForm program which operated within an internal network and used OLEDB connections to a SQL server to fecth data and manipulate it.
Now the program must operate outside the network and therfore cannot access the 1433 port of the server. My solution is a webservice which fetchs the data and returns the XML dataset over the web.
This is fine but with 3000+ records in the data I would like to keep the user up to date with the data transfer (no. of records or KB revceived)
This was easy with DataReader but even though I am unsing Asynchronous Exection (BeginFunction / EndFucntion etc) with the WebMethod I am not sure how I can monitor the data being transfered for display to the user.
Can anyone help me?
Thanks in advance
Regards
Richard
|
|
|
|
|
Hi,
Is there some tutorial about the Crystal Reports shipped with Visual Studio and how to use it from C# ?
Crystal reports newcomer 
|
|
|
|
|
|
|
I have created a simple animation in c# in which a ellipse moves.I want to create more than one objects of that class contaning OnPaint() method.I have done my best to do that .But nothing work for me.I want that the should be more than one object of my gamecontrol class drawn simultanously on the form.
The code is right here.
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace mygame
{
///
/// Summary description for Form1.
///
public class Form1 : System.Windows.Forms.Form
{
protected System.Windows.Forms.Timer timer1;
private System.ComponentModel.IContainer components;
private mygame.display gcontrol;
public int x,y;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//for double buffering
this.BackColor = Color.Black ;
//
// TODO: Add any constructor code after InitializeComponent call
//
}
///
/// Clean up any resources being used.
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.timer1 = new System.Windows.Forms.Timer(this.components);
//
// timer1
//
this.timer1.Enabled = true;
this.timer1.Interval = 40;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Name = "Form1";
this.Text = "Form1";
}
#endregion
}
public class gamecontrol :Form1
{
public System.Windows.Forms.Timer Timer;
private bool widthgreater,heightgreater;
private System.Windows.Forms.Timer mytimer;
public gamecontrol()
{
}
public gamecontrol(int a,int b)
{
x=a;
y=b;
mytimer = this.timer1 ;
mytimer.Tick += new System.EventHandler (game_Tick);
this.Text = " Hello from constructro";
}
public void game_Tick(object sender, System.EventArgs e)
{
this.Refresh();
update();
this.Text = DateTime.Now.ToString();
}
protected override void OnPaint(PaintEventArgs pe)
{
Graphics g = pe.Graphics ;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias ;
Pen pen = new Pen(Color.Blue,10);
g.FillEllipse(Brushes.BlueViolet,x,y,20,20);
base.OnPaint(pe);
}
public void update()
{
if(widthgreater)
{
x-=2;
if(x==0)
{
widthgreater=false;
}
}
else
{
x +=2;
if(x >= this.ClientRectangle.Width-20 )
{
widthgreater=true;
}
}
////////////////////////////////////////////////
///for y
if(heightgreater)
{
y -=2;
if(y<=0)
heightgreater=false;
}
else
{
y +=2;
if(y>=this.ClientRectangle.Height -20 )
heightgreater=true;
}
}
}
public class display
{
private mygame.gamecontrol ball;
public display()
{
ball = new gamecontrol(200,44);
}
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string [] abc)
{
Application.Run(new gamecontrol(33,44));
}
}
}
Any help .
Thanks in advance.
|
|
|
|
|
I want one form with many balls.
|
|
|
|
|
But what if i want to create 10 balls .i just want that how to create a class just like my ball of whom i can create objects just by one statement like just
ball ballobj = new ball();
Would you plz tell me how to create a class like that.
Thanks a million.
|
|
|
|
|
Forgive me if this is not in the SQL section, but its a C# query. I created my own sql connection, that uses a dataReader. I did not want to use a dataAdapter. Anyway, I am new to this, and have found no way of programming your own update command. Any ideas on this?
Background: I did not use the DataAdapter, as I needed to program my own, to display specific data depending on what button a user pressed. This works ok, but now I was wondering, how I can let the user change that data. This is why I need to program my own update. Sorry about this last part, was not sure how much information to include.
|
|
|
|
|
to allow the user to update a database you need to create a insert command. if you used the vs.net data Adapter it would do this for you provided that you didnt have any joins. a insert command looks kinda like. What the C# dataset has a Propertie i think called update ? but what it does is use the data adapters UpdateCommand / Insert Command / delete command depending on how the row was altered. i have never used datareader but check the sdk help and see if it has something simular. Hope this Helps.
<br />
--run this in query analizer to see its effect...alter if you like. Remeber Single Quotes<br />
<br />
use northwind<br />
select * from Categories<br />
<br />
insert into Categories<br />
(CategoryName,[Description])<br />
values<br />
('Beverages','Code Pimp - The only drink that a programmer needs')<br />
<br />
Select * from Categories<br />
so its
Insert into TableNameHere
--Optional Specify Columns
(Column1,Column2)
values
('value1','value2')
The Code Project Is Your Friend...
|
|
|
|
|
Ok, I am now trying to see if I can do this with a dataSet. But, as always, I have a problem. I have filled the dataset, so, I assume this contains all records from the table. However, I want to find out, how I only display 1 row, where an IDfield matches a value specified by a user.
|
|
|
|
|