|
Windows Installer allows you to upgrade components of an installed application. However, this is a complex operation, and the setup authoring tools provided by Visual Studio do not support the necessary capabilities.
So a simple answer is unless you are willing to devote a fairly considerable amount of time and effort towards mastering the complexities of Windows Installer, your only option is to repackage the entire application, have the user uninstall the old version, and then reinstall the new version.
|
|
|
|
|
This question is a toughy, for all you experts out there.
I have a couple of projects that are about ready to be deployed.
But you see, I'm selling this to other franchisees in a company where stealing and corporate swindling is commonplace. So I need a way to give my project a Product Code, and a way to only allow ONE install per copy of the program. I know there is a way to do this, but I hear it's incredibly hard to do.
Also, if it is possible, I would like to do this with some Excel workbooks as well.
thanks ahead of time for any help,
stephen
oh, and I'm using Visual Basic .NET Standard, if that helps.
|
|
|
|
|
The only way to make each installer work only once is to have each installer use a unique key, which it first registers online, to see if it's already been installed. At least, that's all I can think of.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
this is true, but what about cracks? all you would need to do is copy the unlocked exe to another computer. i guess maybe have the app check for the code every time it opens... store the key in a .txt and encrypt it...?
|
|
|
|
|
medicenpringles wrote:
but what about cracks?
Welcome to the world of 'your software is only safe until someone REALLY wants to steal it'
medicenpringles wrote:
all you would need to do is copy the unlocked exe to another computer.
I'd be inclined to back that up with some sort of registry key or other mechanism so that moving the app folder to another PC will not work.
medicenpringles wrote:
i guess maybe have the app check for the code every time it opens..
No, that makes it easier to sniff and crack, I'd have thought. As well as requiring the user to be online ALL the time.
medicenpringles wrote:
store the key in a .txt and encrypt it...?
Perhaps if you generate a key based on the machine specs, and then check against that when you run, so moving to another machine, even with registry keys, will not work as the key will change. That's what Windows does, it installs as many times as you like, but the installed copy won't run until you get that key. The trouble is, this means a hacker only has to skip the key code, and of course your VB.NET app can be decompiled.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
wow.
well i'm not dealing with any real geniuses here, just money-hungry hogs. the machine specs thing sounds good. thanks a ton.
|
|
|
|
|
i just gotta figure out how the hell to generate it... and how to progammatically get the specs.....
hmmm...
|
|
|
|
|
Hi
Cant remember where I downloaded an example from (sorry to the original author..), but here is some code that may be useful
Private Sub GetComputerName
Dim ComputerName As String = SystemInformation.ComputerName
End Sub
Private Sub GetCPU()
Dim query As New SelectQuery("Win32_processor")
Dim search As New ManagementObjectSearcher(query)
Dim strCPU as String
Dim strCPUManuf as String
Dim strBOIS as String
Dim info As ManagementObject
For Each info In search.Get()
strCPU = info("caption").ToString()
strCPUManuf = info("name").ToString().TrimStart
strBOIS = info("version").ToString()
Next
End Sub
Private Sub GetMotherboard()
Dim query As New SelectQuery("Win32_BaseBoard")
Dim search As New ManagementObjectSearcher(query)
Dim strMotherBoard as String
Dim info As ManagementObject
For Each info In search.Get()
strMotherBoard = info("Manufacturer").ToString()
Next
End Sub
|
|
|
|
|
I have code for that... i am success with that... if you want contact me .. my email : ok_jojomon@hotmail.com
Jojomonok
|
|
|
|
|
I can run my program in visual studio, but when i run the release or debug build of it independently i get this error message:
Just-In-Time Debugging
An exception 'System.IO.FileNotFoundException' has occurred in vbGOD.exe.
Possible Debuggers:
New instance of Microsoft CLR Debugger 2003
New instance of Visual Studio .NET 2003
vbGOD - Microsoft Visual Basic .NET [design] - Form1.vb[Design]: Visual Studio .NET 2003
What can cause something like this?
|
|
|
|
|
The config file is not present ? The best way to find out is to accept the offer of attaching to a debugger and see what line is blowing up.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Ok I launched the debug version of the independent build and used a debugger and got this message:
Additional information: File or assembly name AxInterop.SHDocVw, or one of its dependencies, was not found.
I checked the assembly and found AxInterop.SHDocVw. I also looked at the line of code that was causing the problem and it was the "InitializeComponent()" one.
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
I use SHDocVW once in my code:
Private Sub IENavigate(ByVal Target As String)
Dim IE As New SHDocVw.InternetExplorer
'Navigate to a new page or local file
IE.Navigate(Target)
'Show the window
IE.Visible = True
End Sub
|
|
|
|
|
OK - because you use it, that file is needed to run your code. When you import something, check the properties and set 'copy to local folder' so you get a copy in your build folder, to make it easy to grab and deploy.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
In the references it has AxSHDocVw and SHDocVw with the "Copy Local" property already set to "True"
|
|
|
|
|
;)I have pulled together a VB.net project that hooks the keyboard (Ref. Paul Kimmel's hooking program) and allow the user to send "mouse right clicks" via the SendInpuut function (mouse emulation works fine). I am also trying to make this project capable of "Rearrange the keyboard" (example type "e" and "K" is sent to the application) by using SendInput function and I am not able to get it to work. I am finding the use of SendInput function for emmulating key board inputs, not very easy to use..
In am wonder, what are the pros and cons of using SendInput, SendKeys and KeyBoardEvent?? I have been able to get the SendKeys function to work in the project and rearrange the keyboard, except for emmulating "PageUp", "PageDown" (problems with the data types,,).. Another reason that I want to use SendInput function over SendKeys, is the ease of being able to strip down the keyboard input to raw data and change what an application would receive...
I am looking for further discussion on these topics. I would be very happy to share my project code with someone interested in helping me trouble shoot the SendInput function. The project toggles the keyboard input (new mode = ` / old mode = esc). In "new mode" the "d" key when pressed becomes a mouse right click and the "e" key when pressed should place a "t" (thats the problem), into the keyboard input buffer. The SendInput function fails as it returns a "0" as oppose to a "1"..
Reference: Paul Kimmel, Managing Low-Level Keyboard Hooks in VB.NET, Developer. com
Thanks to all that have contributed on my project, either directly by helping out at discussion group, email or by articles publisher to the web on Key Board Hooking, SendInput function, Win32 API's,,, Your help has been priceless.
Thanks again
Matt
|
|
|
|
|
Matt,
One of the windows "message" functions you didn't mention, is TranslateMessage. I don't see in your description what your message target is, but if you are using WM_KEYDOWN in your code it's a good idea to check into this function.
I'd be glad to take a look at your code,If you'll send it to my email address.
progload
|
|
|
|
|
Hi all...
I need to know the difference between Shadows and Overloads, when should i Shadows a Function in the base class and when should i Overloads it.
And i need to know if i can remove a function that exists in an inherited class from my class.
|
|
|
|
|
Ghazi Sarhan wrote:
And i need to know if i can remove a function that exists in an inherited class from my class.
I had no idea about any of this, but google makes it pretty easy to find out.
Shadows: The Shadows keyword works like the Overloads keyword except that with shadows we do not have to follow rules such as implementing the same signature. The Shadows keyword does not require the consent (override ability) of the inherited class to replace the property or method's implementation code. A method does not have to be defined as overridable for the Shadows keyword to work.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
I'm updating a database and want to write well-formed code.
The user attempts to add an item to the db. Items must be unique by name; the item already exists. I check this in my code.
Question:
Which is better:
1] My AddNewItem routine first checks to see if the proposed item exists. Only if it does not will it call an AddItem routine
2] My AddNewItem routine simply calls an AttemptAddNewItem routine. It is that routine's job to handle the checking.
i.e. (pseudo-code only):
1]
sub AddNewItem
if !CheckforExisting() then
AddItem()
else
'warn user
end if
end sub
sub AddItem
'adds new record to db
end function
function CheckForExisting
' checks for existing item
end function
2]
sub AddNewItem
AddItem()
end sub
sub AttemptAddItem
if !CheckforExisting() then
'adds new record to db
else
'warn user
end if
end function
function CheckForExisting
' checks for existing item
end function
________________________________________________________________________
Dave
Y10K bug! Let's not get caught with our pants down **AGAIN**! (DC 02002)
|
|
|
|
|
It depends what you want to do - if someone tries to add an item that has the same unique identifier, do you want to treat it as editing the current item, or ignore it ? What sort of load are you expecting this program to have ? That is, how many database calls a second do you expect ? If this were a web app, I'd have a return code from the stored proc I called to insert tell me if the item already existed, so I only made one round trip to the database, then I'd deal with telling the user based on that code.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
A tray application I have created is preventing windows from shutting down or logging off. The application is just used to poll the machine to get the IP addresses of the interfaces and display it to the user when they click on it. If I close the application, windows behaves normally. If I leave the application running and attempt to shutdown, the application will close, but windows does not shutdown. If I tell windows to shutdown again, then it will shutdown.
I have read the querysessionend MSDN article and have attempted to implent that, but even though I can trap the shutdown, logoff, etc... event, I still cannot seem to determine why Windows will not shutdown.
I am really stuck here... Anyone come across this or have any ideas of things to try?
Your help is appreciated...
|
|
|
|
|
Are you handling the Close event of any forms in your application?
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
|
I have a problem with a Word VBA function that is called from an Access VBA application.
The following line executes fine when the user has all permissions allowed to the folder in which the document is saved but when "Delete Subfolders and Files" and "Delete" are denied Word generates the dialogue "Word cannot complete the save due to a file permission error".
ActiveDocument.SaveAs FileName:=fpn_newlet, FileFormat:=wdFormatDocument, _
LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
False
I am not sure if this problem is due to automation between Access and Word or a known problem.
Cannot find a solution - can anyone help?
|
|
|
|
|
This is because when you save a Word document, Word saves the document into a temporary file in the same directory that the original document was opened in. After the new tempo file has been written, the original document file is deleted and the temp file renamed to the same name as the original. THERE IS NO WORKAROUND FOR THIS. You must put the Delete permissions back in in order for Word to properly save documents.
Description of how Word creates temporary files[^]
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|