Secure method for software distribution - software-distribution

I work at a software development company, and one of our tasks is to distribute our software to our customers before deployment. We have a lot of software components that at built separately, so we end up with 5 or more packages - usually more, and some times up to several hundred files because we also need to distribute data sets from time to time. We would like to find a way to distribute these packages to the customers as easy as possible. Currently we are using Box which is OK, but uploading and downloading several hundred packages takes a while, so we would like a method that will automatically place the files at the customers site.
Ideally we would like to end up with a file structure on our build environment, where we could place folders like:
Customer1
Customer2
Customer3
etc.
and putting files into those folders would automatically end up at that particular customer. It could probably be done by Dropbox, but we cannot install that at the customers sites.
We expect to build something with that functionality ourselves, but are there any frameworks or anything so we don't have to start from scratch? It's important that the files actually end up at the customers sites, and not on a shared drive somewhere in the cloud, since some of the customers have really slow internet connection. We are running on Windows.

You can link your startup page with web based verification process. If the software is installed in particular MAC ID, then verify it first at your web portal, and create one file or a value in db to ensure it is verified. From the 2nd time the startup page will check for the verification key in db or the verification file. If it is available then it will open the software otherwise it should redirect the software to registration page.

Related

What is the best way to host the Apple App Site Association file?

To enable certain Apple app features (Sign in with Apple in this case) Apple requires that you register an associated web domain. This domain needs to host a file called apple-app-site-association (with no extension) in the root of that domain.
I am looking for a free way to do this. My developer website is hosted by Wix website builder. Wix will not allow you to upload files with no extension. Even if they did, I'm not convinced that their domain system would allow it. Wix domains follow the pattern of https://{YourUser}.wixsite.com/{YourWebsite}. Apple would look for the file at https://{YourUser}.wixsite.com/, a location which you have no control over. I believe that the other free website builder, Squarespace, suffers in the same way. Someone found a Cloudflare workaround, but Cloudflare no longer works with either website.
I didn't know it would be such a pain to put this file somewhere. What is the best solution to this? I'm surely not the first person to stumble into it.
I wasn't able to get a working solution with any of the standard website building platforms. I was able to get two slightly different solutions working though. GitHub Pages is free and lets you set up a repository that meets the requirements for Apple's file. Firebase lets you do the same thing through their "Hosting" service, in the free tier. On Windows you will need to use command prompt to create a folder that begins with a period for both repositories. GitHub Pages can be uploaded to from any Git program, Firebase Hosting requires you use their command line tools package.

Distributing installer of Windows desktop application

I have an installer for my Windows app and it is quite big (>100 Mb).
I am also using ClickOnce deployment framework, so each time I issue an update all my users have to download the installer. We tried to use Amazon S3 to store the setup file, but it turns out that download speeds differ significantly across the globe, e.g. in US the download speed is several Mbps while in Europe or China it is less than 30Kbps, which is inapplicable.
However when I download most of the apps from internet, the download speed is usually good and doesn't depend this much on server location. How is this problem usually solved?
Big companies like Microsoft use a content delivery network which makes sure no matter where you come from a download server gets assigned to you which is as near as possible to your current location.

InnoSetup - how to make setup.exe into 875kB? So that users download it faster and on download it will download another one?

Using InnoSetup i prepared my maininstaller.exe which is very large such as 90Mb when user downloads it, it take sometimes ages.
as a result often user ignores it and my setup is incomplete because of not user friendly.
Now i have compared Google Chrome/Canary web browsers concepts, they are also large in size, but they used 2 types of installer one is very tiny small size installer, which is just to download quickly and execute, to download the second large main installer, this method is more friendly to deploy large installation, and mostly accepted by many users.
Now, How can i do such (like Google Chrome web browser installer) with Innosetup? one first_setup.exe which is very tiny in size, so that user can quickly download it, but once that is executed it will go to internet and download my maininstaller.exe and make sure its downloaded correctly then execute it.
Is this possible? any idea.
Yes. You can build some sort of online installer which will e.g. download only components that the user chose during the setup wizard. For downloading component files or component setup files you can use e.g. the IDP plugin which I would prefer, or InnoTools Downloader.
Martijn Laan even considered to build in downloading feature for installed files in this issue.

How to track a software download source

Here's the problem. We have some software, there is a free edition and a paid edition available.
The software is an EXE download which sets up the software. The way we are hoping to gain most sales are from people downloading the free edition, then deciding through various links in the software that they would like to pay for it now and unlock new features.
At the moment we run several campaigns to get visitors to our site. We know that a visitor came from say our Reddit campaign, downloaded our software and then from all intents and purposes they have vanished. If they use the software and wish to pay, they click a link in the software and the purchase is annonymous.
What we would like to do is when they download the software, somehow it generates a text file in their install directory with the source of their download in it. This file would contain data like "reddit1" to indicate they originated from reddit campaign #1. Then every link in the software sends that variable in a GET request so we know where the sale actually has come from.
What we can't figure out the best way to do, is when we have the variable with their source in it on the website, how to pass this to the EXE download so during install it generates the data file? We don't want to have multiple downloads for each campaign we run.
We managed to solve this problem by passing an Id into the filename, such as:
setup_221.exe
Where 221 = the referal. The setup program can take the referal ID and save this into the directory, then pass it to the website which translates it as the actual campaign.
One way would be to ask the client to complete some details before download, so you can uniquely identify him and give him a serial number.
After the download finishes, the first time is ran, the soft will ask the user for the serial
and then will make a request to the server and get needed details related to that user like the campaign, etc...
When the user wants to update his licence, the software will ask the server for a link based on that user.
(Provided that you're using .NET, which, from your other questions, this appears to be the case...)
Perhaps you don't have multiple versions of your product, but still multiple EXEs for each campaign. You could maintain and possibly even automate these "one off" builds at download-time by merging in a lightweight "referrer" assembly into the final EXE using ILMerge. Your referrer assembly should try to be loaded at runtime by the main product EXE, and if it finds it, then it could modify its referrer parameter.
Is it an option to generate the exe file when the download starts? If so, you could add the textfile then.

Content/Document/Project Management System - Which is right for my needs?

So I just started an internship with this nonprofit company and it's pretty cool. My first assignment was to find a type of program that would work well for the company and its users. I and some team members just finished summarizing down what I think is a good list for the needed functionality. Before I started working, I've never even heard of content/document/knowledge/project management systems. So I've done a bit of research on many other programs and I've narrowed it down to Joomla, activeCollab, Basecamp, sharepoint and a few more. Which program out there would fit my needs the best? It doesn't have to be from the list I just wrote, those are just the programs that popped up first when I started searching.
MUST-HAVE CAPABILITIES
Searchable
Keyword search
Advanced search: Ability to tag & search documents by different categories, for example, type of file (e.g. PDF, Word, etc.), service line (e.g., fundraising, strategy, etc.), type of document (e.g., deliverable, data set, etc.)
In-document search
Categorization
Simple navigation to browse all content
Simple to set up and modify the tree/hierarchy used to browse content
Workrooms
Provide each team a separate workroom to post their own documents
Easy to navigate from team workrooms to the Toolkits (best if team workrooms reside in the same system the toolkits reside)
Version Control
Ability to see which is the most recent file
Security
Password protected
Tiered security, i.e. certain permissions for certain users (to create workrooms, change navigation tree, change toolkits, view/post team files, etc.)
Multi-year support
Easy to “archive” old workrooms or files so the navigation doesn’t become cluttered over time
Share across workgroups
Ability for power users to access multiple team workrooms
Ability to send docs from one group to another—or to the toolkits (by simple tagging or simple “submit” feature)
Uploading
Ability to upload files to workrooms
Ability to submit a new file for consideration for a toolkit (not a file currently in any workroom)
OPTIONAL CAPABILITIES
Messaging
Opt-in notification of uploaded files or changes to existing files
Version Control
Ability to see who has the file checked out
External Access
Client access to certain documents
Within our website
Users gain access from our website
It looks like it resides on our website
Collaboration Tools
Team Calendar
Blog / Forum
Instant Chat
WebEx/Remote Presentation (for virtual team meeting)
Ratings
1-5 Star document rating (by user community)
Searching & Sorting documents by rating (best documents display first in search results)
Simultaneous Edit
Multiple people can edit the same document at same time
Workflow
Ability to tag a file to be reviewed by another user (ability to “escalate” a file for review by someone else)
Messaging alerts when a file has been flagged for a user
Most of the features that you mentioned above are available for free using Plone, which is an application that runs on top of Zope. I actually built and deployed an instance of Plone for a non-prof that had a lot of the features that mentioned above. They features might not have had the same names, but you get a lot of the same functionality.
Here's what my users really liked about Plone:
The ability to index the content of MS Office documents, so that people could search for documents based on content in addition to property and tags/keywords.
Usability. The default theme for Plone isn't the flashiest thing that you will ever see, but it's usability is excellent.
How easy it was the change the system and add new sites or functionality.
Here's what I liked about Plone:
Zero licensing costs. I was able to implement features that usually only come in very expensive systems for free. And I'm aware of these types of costs, because I administer FileNet systems for a living
It was very easy to install, upgrade, and administer. Please take that "pro" with a grain of salt if you're not a professional systems administrator :)
Overall, it was just very easy to work with.
And here are my cons:
If you need the web site to be accessible on the public internet, then your hosting costs may be higher-than-expected. It's definitely cheaper to set up a vanilla Joomla site than it is to set up a vanilla Plone site. Please note that you sound like you need a lot more than a vanilla content management system, so their may be no difference in hosting costs.
Plone is built on Zope, and Zope is an application server. It's easy to set up and use, but it works a little differently than a lot of other web and application servers. If you're used to administering a LAMP stack, then this will be different (but not necessarily bad).
One final con is true with all modern content management systems: don't give your users enough rope to hang themselves. When it take 2 minutes to a wiki and a blog to a web site, then users expect you to add new sites all of the time. Every new site adds a lot of administrative work to your plate, so try and get as much functionality as you can from each site that you add.
Hope that helps!
Tom Purl
Basecamp. Even if it doesn't have all the features you think you need, it does what it is supposed to (37Signals loves to rant about too many features, you aren't gonna need it (YAGNI), etc.)
Joomla is a pain. Activecollab is a poor clone of basecamp (unless it has changed drastically in the year or so that its been since I tried to use it to get out of paying for basecamp).

Resources