I need a process with administrator privileges. From this question and answers it seems that there is no better way than to launch a separate process. Since I would rather have a process dedicated to that instead of just launching my original application in a second process just for this one method – I thought I would simply create two projects in one solution in VS2010. However – when trying to deploy it – it seems that I can only publish one of them at a time. That wouldn't do, because I don't want a client to have to install more than one – and then there would also be the problem of figuring out the relative paths etc.
I don't want both processes as startup applications. I want one to be the startup application, which calls (if needed) the second one for just one method.
So how do I have two processes with one clickonce install?
If you don't want to have the user install more than one of the apps, then you don't want to have multiple ClickOnce deployments. What you really want is one deployment. So the ClickOnce app needs to be your main app, and you need to include the exe from the secondary app in the ClickOnce deployment. I would do this:
Add a copy of the exe to the ClickOnce project, set build action to 'content' and copy-to-output-directory to 'copy always'. Then do a build and check the Application Files dialog in the publish properties and make sure it shows up.
Now, if you can build the solution and it builds both projects, make sure it's building the project that creates the exe first. Then add a post-build command to the ClickOnce project that will copy it from the first project's output directory to the second project's output directory.
What will happen is it will build the first project, then it will build the C/O project (and copy the ClickOnce project's version of the exe to the output directory), and THEN it will copy the newest version of the exe from the other project into the ClickOnce project's output directory, and then it will create the deployment.
I'm not a msbuild expert, but the post-build command would be something like this.
COPY/Y "$(ProjectDir)....\otherproject\bin\release\mynew.exe" "$TargetDir)\mynew.exe"
This copies from the current project, up two levels, the other project, then the bin folder, then release + mynew.exe, to the build output directory. I'm not going to have the directory structure exactly right to the other project -- you'll need to set that yourself. But this gives you the general idea.
you need to reference second (worker) project from the first (main) project - and then, if you go to first project properties -> Publish -> Application Files, you should see second EXE as a dependency already. If not - just set "Publish Status" dropdown to "Include".
also - I'm not sure what's your goal, but take a look at my post here: Forced the application to have the administrator privileges - very similar issue with calling an app with admin privileges from ClickOnce app. Might save you few minutes.