

DesktopBootstrap: like Twitter Bootstrap, but for desktop apps - adamsmith
https://github.com/adamsmith/DesktopBootstrap

======
tonyedgecombe
"The Service is a Windows service, which runs as SYSTEM, and is available to
apply automatic updates, or do other things as SYSTEM."

Is it just me that doesn't like this. Services are meant for processes that
need to do something in the background, not some hack to get around elevation
requirements.

If I look at the list of services running on my machine it's getting like the
old days with notify tray apps. All of them nibbling away at my resources.

------
whimsy
Windows desktop apps.

~~~
maaku
I wonder how much work it would take to port to Mono, however.

------
teyc
Thanks Adam. There was another interesting windows project called command line
ide for creating visual studio solutions. <http://remi.org/2011/04/17/clide>

------
mullr
"ClickOnce" deployment, which you get for free when you're developing a
windows desktop app, does the same thing as far as I can tell. And it doesn't
install a service on your system; instead you can configure it to check for
updates in the background when your app is running, installing them when it's
launched the next time.

So... what does this offer over the stock solution?

~~~
adamsmith
I've never used ClickOnce, so maybe someone with more direct experience can
chime in!

My current project, and my last project (Xobni) both worked with COM
components that could not use Reg-free COM for various reasons. Thus, if
another app registers the same COM component, and then the user uninstalled
that app, we needed to be able to re-register that COM component, which
required SYSTEM level privileges in order to avoid a UAC elevation prompt.

Services can also be useful if you want to be able to run code when a user is
not logged in, or if you want installs to be system-wide.

For example, in DesktopBootstrap, installs are for "all users," but if one
user disables auto updates or starting up with Windows, it actually asks the
service to disable those things for all users. You need a service running as
SYSTEM to be able to pull that off, again unless you ask the user to elevate
you.

Finally, I'm curious about ClickOnce's browser-powered install. I'm not saying
it doesn't work -- it might even increase conversion rates -- I'm just
curious. I'd love to learn more about what happens with users who are using a
non-ClickOnce-compatible browser, and/or who don't have the .NET framework
installed yet.

~~~
TimGebhardt
ClickOnce doesn't require admin privileges to install software. Each program
is installed on a per-user basis under the user's profile. So it doesn't need
admin rights to write to C:\Program Files. I'm pretty sure this is how Chrome
works as well.

As for installing COM components, you can install COM components on a per-user
basis as well. The registry keys are installed under HKCU rather than HKLM, so
again you don't need admin access.

I program .NET client applications for my day job and we use ClickOnce to
deploy our software. The software doesn't require admin access to install or
use, and we register a COM component for integration with Excel and it all
works just fine.

~~~
adamsmith
Wow that's really cool! I wasn't sure you could register COM classes from
ClickOnce.

So yes it seems like ClickOnce is great as long as you don't need per machine
installs or special powers to eg upgrade the user's .NET version, etc etc.

How have you found the .application installer? (vs exe)

Edit to add: I was surprised when MS introduced .msi installers! Someone at
MSFT is cranking out the installer systems.)

~~~
TimGebhardt
I actually like the .application format. It's nice because it's just an XML
file that the end-customer's computer knows what to do with it.

At my company we've actually created an ASP.NET MVC application that
dynamically constructs and serves the .application file on a per-user basis.
This easily allows us to do canary releasing or beta previews.

We're very happy with it, and so are our customers and stakeholders.

------
jccodez
"Users love software that gets better over time, with no effort on their
part."

This is still a big deal in the desktop world where I live.

------
aymeric
Can we have a screenshot?

~~~
adamsmith
Sure! There's not a lot to look at! Here are two screenshots:

DbgView of an update happening:
<http://dl.dropbox.com/u/3/DesktopBootstrap_Updating.png>

Default tray icon menu (with custom cloud icon):
<http://dl.dropbox.com/u/3/DesktopBootstrap_TrayIcon.png>

(The idea is that you can blast away the tray icon if you don't want or need
it, and either way you add your own UI and application logic on top!)

------
drewda
Uh, what's the relationship to Twitter Bootstrap? That's a library for GUI
widgets and styling.

------
seltzered_
curious, why winforms over wpf? Are you intending for more cross-compatability
that way?

~~~
adamsmith
Yeah -- the particular application that this is derived from needed pretty
wide compatibility out of the box, so the projects are targeted to .NET 2.0.

But this is also helpful for DesktopBootstrap. If someone wants to retarget to
a higher .NET version it's very easy to do. There's only one winform in there
(the tray icon)!

------
MostAwesomeDude
So, uh, what does this provide over Glade, wxGlade, and QtDesigner? Why should
I go with this instead of the open-source solution?

~~~
adamsmith
This isn't really the same thing. Those things (at least after my brief
googling) are for building apps. This is an attempt at packing everything else
-- mostly an installer, build system, and auto updates -- but for .NET apps
rather than python apps.

(If there's such a set of things for python desktop apps, including a byte
code obfuscator ideally, or someone builds it, that'd be awesome and I'd love
to know about it!)

~~~
MostAwesomeDude
I think it's interesting that you mentioned Python instead of C or C++.

There is no such thing as bytecode obfuscation for Python. The nature of
Python's bytecode is such that there is no effective way to obfuscate what the
bytecode is doing without incurring massive slowdowns. Consider using legal
means, rather than technical means, to protect your code from prying eyes, and
remember that many proprietary companies publish Python source with their non-
free software. My favorite example remains Civilization 4.

