|
I did follow the instructions, and I found everything in the DeBug folder as you suggested ... that is slick!
I tested it and uninstalled it ... that worked too, BUT ...
How do I make the screen saver being installed the default screen saver without making my relatives right click on the desktop, select properties, then screen saver, etc ...
Isn't there a way to do that for them?
On a side note, I am going to do some additional reading on creating "Setup Projects" after all this. Do you know of any good books, with examples?
Perhaps an article on deploying the Screen Saver kit should be written for CodeProject, for both the CD option and using the ClickOnce stuff too.
Anyways, thanks for the help thusfar, I appreciate it, just one more step to go! I await your answer
|
|
|
|
|
Alright. I'm going with you to the end.
There is a registry key in windows that you got to change. The key is "HKEY_CURRENT_USER\Control Panel\Desktop ". Inside it there is a value called "SCRNSAVE.EXE ". If this value doesn't exist you should create it, if it does you should give it the value "C:\windows\MyFile.scr". To do that while you install your program you have to do a custom action that is done while installing the software.
1- Create the setup project in the same solution as your screen saver solution
2- Add the primary output of your screensaver project to the windows folder you create in the file system panel
3- Right click on the setup project's name => view => custom actions
4- Add a new custom action and choose the primary output of your screensaver project
5- In the screensaver project add a new item => installer class
6- In the Installer1.cs overide the Install() method.
7- In that method alter the above mentioned registry key
8- Don't hardcode the text "C:\windows" as the path. Rather use
Directory.GetParent(Environment.SpecialFolder.System);
Maybe they installed windows in another partition than C.
PS.
I've discovered a much easier way to install your screensaver. Just give your relatives the scr file and tell them to Right click on it => Install. This will directly install it and set it as the default screen saver. Also tell them not to delete the scr file BTW, as it's not copied to the windows directory.
Regards
|
|
|
|
|
I got as far as Step #4
When I view the custom actions, there are four folders there; Install, Commit, Rollback, and Uninstall as well as the top node "Custom Actions". Right clicking on anyone of those items brings up a box and I have four additional folders to choose from, I have to select one of the folders in order to enable the "add output" button ...
Question, which folder do I select in the pop-up box, and wich node while viewing the custom actions do I select or do I select the top node "Custom Actions"?
I think I going to create an article for others after all this ... LOL
|
|
|
|
|
Actually you should right click on any node => Add custom action. Then follow the rest of the steps.
Regards
|
|
|
|
|
Ive created the Install() file and I must have missed something, here is my code ...
namespace ScreenSaver1
{
[RunInstaller(true)]
class Installer1 : Installer
{
const string _screenSaverValue = "SCRNSAVE.EXE";
public Installer1()
{
}
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
RegistryKey theRootKey = Registry.CurrentUser;
RegistryKey theControlPanel = theRootKey.OpenSubKey("Control Panel");
RegistryKey theDeskTopKey = theControlPanel.OpenSubKey("Desktop");
if (theDeskTopKey.GetValue(_screenSaverValue) == null)
{
string valName = _screenSaverValue;
object testValue = Directory.GetParent(Environment.SpecialFolder.System.ToString()) + "ScreenSaver1.scr";
RegistryValueKind valKind = RegistryValueKind.String;
theRootKey.SetValue(valName, testValue, valKind);
}
}
}
}
Everything else works fine, just not setting the registry value ...
|
|
|
|
|
It's one simple mistake -you can post it in the subtle bugs forum BTW -. You've written
theRootKey.SetValue(valName, testValue, valKind);
... while it should have been
theDeskTopKey.SetValue(valName, testValue, valKind);
as the value is under the "HKEY_CURRENT_USER\Control Panel\Desktop " key not the "Current User " root key.
I hope it works.
PS.
the line
if (theDeskTopKey.GetValue(_screenSaverValue) == null)
tests only if the user doesn't have any screen saver chosen. If they have another screen saver chosen this value will not be null. Rather it will be the path to the other screen saver. You should always SetValue() even if it wasn't null.
Regards
|
|
|
|
|
I've made the changes and still I have nothing ... it won't create the value within the Key ... everything else works though.
To bad I can't just send you the entire project to look at ...
Thanks for all your help, you've definately went further to help me than I ever anticipated. I really appreciate your help! I've learned several things from this, thus far ...
Xaverian
|
|
|
|
|
I am searching for the code to export the datagrid columns in to the excel sheet. Most of the code i have seen are reading the each value one by one from the datagrid or dataset and writing in to excel sheet. But in Asp.net, there is an easy way to do it. Is there is any easy way to do in windows application also. Thanks to all.
|
|
|
|
|
You can export your data as Xml files, or comma delimited files which are easily read by Excel among other programs as well.
Regards
|
|
|
|
|
There are plenty of articles on CodeProject that will help you.
|
|
|
|
|
I have one openFileDialog1 .
How to get the name of the selected file.
But not the all path.
Exp:"C:\NewFolder\TextFile.txt".
Just "TextFile.txt"
Vasildb
|
|
|
|
|
You can use a Path object from the Sytem.IO namespace.
string fileName = Path.GetFileName(OpenFileDialog1.FileName);
Path.GetFileName[^]
FileDialog.FileName[^]
Paul Lyons, CCPL Certified Code Project Lurker
|
|
|
|
|
hi,
use Substring and LastIndexOf functions to get the required value;
any string supports these methods.
regards.
|
|
|
|
|
That's, most certainly, doing it the hard way and in some cases unreliably.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Thnx Dave ,for correction.
|
|
|
|
|
That should never be done. Prone to too many errors.
|
|
|
|
|
Hi,
Can some one please let me know how can I use an API in my application.
Thanks:
Rakesh
Rakesh
|
|
|
|
|
Hello,
Means you want to inport API in our c# aplication???
Than use DllImport attribute
DllImport("TestLib.dll")]
public static extern void DisplayHelloFromDLL ();
nishu
|
|
|
|
|
I am looking to work with LCS APIs like RTC Client API. I am unable to find this RTC Client API. Can you help me in this regard?
Actually the situation is like this:
I have some users in my Active Directory and I want to develop some client application which will display all the users in the Active directory using the Live Communication Server APIs like RTC Client API.
Rakesh
|
|
|
|
|
What API? If it's WinAPI, you may want to take a look at this site:
http://www.pinvoke.net/
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
I am looking to work with LCS APIs like RTC Client API. I am unable to find this RTC Client API. Can you help me in this regard?
Actually the situation is like this:
I have some users in my Active Directory and I want to develop some client application which will display all the users in the Active directory using the Live Communication Server APIs like RTC Client API.
Thanks:
Rakesh
Rakesh
|
|
|
|
|
rockyl wrote: I am looking to work with LCS APIs like RTC Client API. I am unable to find this RTC Client API. Can you help me in this regard?
Have you looked here: MSDN2: RTC Client API[^]
--EricDV Sig---------
Some problems are so complex that you have to be highly intelligent and well informed just to be undecided about them.
- Laurence J. Peters
|
|
|
|
|
[DllImport("kernel32")]
public static extern long WinExec(string ipCmdLine, int nCmdShow);
in any method of yours
long sonuc = WinExec("C:\\Program Files\\Winamp\\Winamp.exe", 3);
/* nCmdShow=9 for windows open in orginial size
=3 open full screen
=6 open in minimize*/
|
|
|
|
|
Sorry to say but I did not get your point. I was actually speaking about the Live Communication Server APIs.
Rakesh
|
|
|
|
|
if you have C/C++ signatures to call the API by there's a tool available called "pinvoke wizard" that will generate the pinvoke signatures for use in .net. If you don't have any API documentation first and foremost, it sucks to be you! All I can suggest in that case is to visit the c++ forums and ask for help in reverse engineering the API from the dll files.
--
Rules of thumb should not be taken for the whole hand.
|
|
|
|