|
|
Hi, I have an asp.net app with a web form that contains a listbox. The app also contains a frameset, which is loaded by a Contents.htm file.
When the user chooses a number from the list box, I need to pass that number to the href element i.e
"a href="Mail[choosen number].aspx" etc." in the contents file.
E.g user chooses 3 from listbox, should pass 3 to contents.htm and place 3 in the href element...
So the page "a href="Mail3.aspx" etc." is called.
Hope I make sense!! Thanks.
|
|
|
|
|
This question is much better handled in the ASP.NET forum. Just because the code-behind is written in C# doesn't mean that the question has anything to do with C#.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I created a web control to display html files on my form. My idea was to click space bar and to go to next file (html, picture or movie) in the folder, but my form looses focus and doesn't pick up the keypress event. I turned on key preview and made a button which should get the focus after the web control displays what it is suppose to diplay. The problem I am having is that when I am playing a movie or a flash file, it won't transfer the focus to the button or to the form. But, if I make a messagebox right after I give button the focus, then the focus is set to the button. How can I fix this?
|
|
|
|
|
Are your waiting for the HTML document to completely load before you set the focus back to your button? Are you setting the focus inside the DocumentComplete event of the WebBrowser control?
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I just tried setting the focus to a button in the DocumentComplete event so the form would be able to pick up the keypress event, but still doesn't work.
|
|
|
|
|
Given the limitations of comercial solutions, I'm writing a custom app installation utility. I'm writing it in a generic manner. However, the application I'm initially writing it for has a mixture of .NET and ASP 3.0/COM+ functionality. As such, I need to be able to:
- Create/Delete COM+ Applications and set properties.
- Register/Unregister COM+ components (NOT assemblies) in those applications and set properties.
I've written a class that successfully creates applications and adds components. However, using COMAdminCatalog.InstallComponent() to add components to the application adds exactly 18 entries to the registry. By contrast, simply registering a component and its type library using regsvr32 adds only 10.
My Issue: Using either COMAdminCatalog.Remove() or resvr32 /u doesn't remove ALL registry entries, but leaves 6 entries, all under HKLM\SOFTWARE\Microsoft\COM3\SelfReg. The entries left in there include a CLSID, ProgID and type library.
My Question: I've searched the .NET fx high and low and looked for options for interop, all to no avail. How do I programmatically remove ALL references of a COM+ DLL from the registry so as not to cause any potential conflicts (DLL hell) in future upgrades where binary compatibility is broken? Thanx!
Boyd Campbell
Systems Engineer
|
|
|
|
|
Is this for a managed service component, or a native COM+ server? For the former, you should be using regsvcs.exe, not regsvr32.exe (which leads me to believe this is a native COM+ server you're talking about since a .NET assembly doesn't export DllRegisterServer ). For the latter, you should ask in the COM forum, not the C# language forum.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Sorry...I thought I made it clear, though I should've used the word "unmanaged".
I am talking about a native COM+ server. However, I'm having to do it from managed code (C#), so I believe I'm in the proper messageboard context.
Here's a snippet I whipped up as an example of what I'm attempting to accomplish:
<snip>
public static void DeleteComServicesApp()
{
// Get the current catalog of applications.
COMAdminCatalog lobj_Catalog = new COMAdminCatalogClass();
COMAdminCatalogCollection lobj_Catalogs = (COMAdminCatalogCollection)
lobj_Catalog.GetCollection("Applications");
try
{
lobj_Catalogs.Populate();
// Try to find the applicable application.
if(lobj_Catalogs.Count > 0)
{
ICatalogObject lobj_AppToFind;
bool lb_Exists = false;
for(short i = 0; i < lobj_Catalogs.Count; i ++)
{
lobj_AppToFind = (ICatalogObject)lobj_Catalogs.get_Item(i);
if((string)lobj_AppToFind.get_Value("Name") == "MyCOMPlusApplicationToDelete")
{
/* The application was found. Delete it, thereby removing and unregistering
all unmanaged COM+ servers in the process. Though the application is
properly removed from the catalog, this is what I'm saying doesn't
fully unregister the servers. It removes many of the registry entries,
but not all.
*/
lobj_Catalogs.Remove(i);
lobj_Catalogs.SaveChanges();
lb_Exists = true;
break;
}
}
}
}
catch (MyCustomCatalogException cce)
.
.
.
</snip>
|
|
|
|
|
Again, this still really belongs in the COM forum. Despite the fact your using C# to write this, your simply marshaling calls to COM and, of course, the functionality is defined natively. The interop assembly you've created for the catalog manager is nothing more than an RCW.
I think the trick is figuring out what put those registry settings there. How exactly was the COM+ server registered? I wouldn't imagine those are chaced settings because the key is called "SelfReg". If the COM+ server was installed with a Windows Installer package, then you should actually interop the MSI typelib (or just P/Invoke the functions you need) to remove the feature (or the whole package). MSI will clean-up all settings it put there (unless you have some transitive condition or permanent flag enabled).
If it's anything like that, I can personally help you, but if it's questions about the COMAdminCatalog and related classes this would be more appropriately asked in the COM forum.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Ok...I'll make another post of the original message on the COM list.
FYI: The server was actually registered in another method using the COMAdminCatalog:
<snip>
lobj_Catalog.InstallComponent("MyCOMPlusApplication",
@"c:\myUnmanagedComSErver.dll", "", "");
</snip>
If you can point me in any direction or give any recommendations on how to create my own installation package, I'd appreciate it. If you have any opinions about InstallShield, Wise or any other third party tool, I'd appreciate that as well. We decided to go in-house because those tools don't handle some of the more complex issues concerning enterprise application installation (COM apps & servers & all related settings, MSMQ & settings, any other custom functional aspects of the install, etc.).
Thank you sir!
|
|
|
|
|
I've used both Wise and InstallShield since their initial Windows Installer builders (started with the Windows Installer beta) and prefer Wise. InstallShield took for ever to add direct MSI table manipulation, something I use a lot. They have it now, but only after several major versions. Considering the price and the user-friendliness, I choose Wise.
Frankly speaking, though, I typically alter MSI packages directly (using Wise, I do this before compiling). The interfaces are nice, but I'm an old hack and can usually do things faster myself.
COM+ server can be registered using Windows Installer via the Complus table. You can even use the crappy Windows Installer project with VS.NET and then hack this simple chance in the MSI after compiling using Orca (from the Windows Installer SDK, part of the Platform SDK).
Custom actions can acheive everything else, but if you don't need package management (because MSI is very good at that) and your internal solution works - good for you.
Since you are installing the component via the COMAdminCatalog , then it's obviously putting those settings there.
Just so you know, I have been working with OLE/COM for about 10 years now, so I'm no stranger, although I haven't gotten too deep into COM+. That being said, though, I think you might have better luck in the COM forum where there probably are people with COM+ experience.
However, following COM guidelines, binary compatibility should never be broken (when possible) for the same CLSID. That information - unless that ProgID is verion-dependent, shouldn't hurt anything so long as you take care (not that it'd take much effort) to maintain binary compatibility.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Thanks for all your help Heath. Much appreciated. I posted the same question on the COM list late yesterday.
Our application relates to the Transportation industry. It's also a behemoth of an application with hundreds of thousands of lines of code in nearly every MS technology you can think of. Mix this in with the occasional Jr. programmer who is thrown to the wolves to a task and not very learned in thinking "outside the box", and you've got yourself a recipe for future changes that break BC. Very unfortunate, but we hit it about once a quarter.
Two more questions:
- Would you think purchasing Wise would bring me a faster result than building my own, even considering all the customization I'd have to do with the advanced nature of some of our installation as well as my learning curve in using the tool and a proprietary scripting language?
- In your experience, are there any limitations to using Wise that would be better served by building a custom application?
|
|
|
|
|
We have a large multi-tiered application with several hundred thousand lines of code as well using .NET (just about feature), COM, and even a little Java. The big difference is it's written almost entirely by Jr. programmers. Save me, my right-hand man, and the R&D director (I'm the technology director), everyone's pretty new at it. The app works, but it's bloated. Ick.
Wise is a good choice for writing MSI packages (and the proprietary scripting language is entirely optional; both Wise and InstallShield allow you to use their proprietary scripting languages for custom actions), but what you need to evaluate is whether Windows Installer is right for you.
Windows Installer is a complete package management system. It'd be really hard to describe all that Windows Installer does, so I'll direct you to an overview: http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp[^].
Basically, when you design installation packages you group things into features and components (a subset of features). Upgrades and patches are easy to make as well, and these can migrate feature states. When you install a package, information about it's features, components, directories, and upgrade codes are saved in the registry as well. This information can be queried using WMI even. It also features a transacted installation process. If an error occurs during installation, everything is rolled back. The uninstall is also clean, unless you change its behavior.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi
I want to stop (or abort) a thread, when the user does something (like log out), and then start it again (from the beguining) when he does something else (like log in).
But when I stop a thread, I cannot restar call thread.start on it. How can I do it?
thanks
|
|
|
|
|
If this is a non-user-specific thread (i.e., there's one thread that handles all logins and logoffs, not one per user), you could conceivably get by without killing the thread, but rather setting some flag that shows the thread contents are "invalid" (like using a SetData call, etc.), and then using either Thread.Suspend or Thread.Sleep(Timeout.Infinite) on it.
Of course, this depends entirely on the implementation...
Jeremy Kimball
I have traveled the gutters, lo these many days, with no signs of life. Well met.
-brianwelsch
|
|
|
|
|
To add to what Jeremy has posted... Threads cannot be restarted once they're stopped, or Aborted. There is no method of restarting an Aborted thread. You must destroy the Thread object and create a new one, if you .Abort a thread or the thread reaches its own termination point.
You can use the Suspend and Resume methods, but you better know exactly what your doing, why your doing it, and have exhausted every other method before attempting to use these methods. Using these methods without knowing the details of what happens and why WILL result in a Deadlock condition and a hung application.
The full docs on the Threading in managed code starts here[^] on MSDN.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
how can I destroy the Thread object?
|
|
|
|
|
myThread.Dispose();
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Hi, guys
I want to add a password for my application. But I don't know where to store the username and password. In fact, I don't hope a special file to store them. Whether I can store them into register table. And how?
Or other correct place to stroe them but I don't know.
Wish some useful idea.
Thank you very much!
vigorous
|
|
|
|
|
You don't tell us anything about your application. That would generally determine where would be a sensible place.
Wherever you store this information it is important to encrypt the passwords. Preferably using a one way encryption so when they user types their password, you encrypt what they typed and compare the two encrypted strings.
I just got a letter from equiTalk today who provide cheap telephone calls and in it they put in a nice little side box my phone number, email address, account number and PASSWORD. To put my reaction diplomatically: I was severely unimpressed.
"You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar
The Second EuroCPian Event will be in Brussels on the 4th of September
Can't manage to P/Invoke that Win32 API in .NET? Why not do interop the wiki way!
My Blog
|
|
|
|
|
In fact ,what I need is quite simple, Just an identity window which user can enter a username and password. If they are correct, user could enter the following interface. Just so simple. And there is a non-connected application.
Now I understand DPAPI could protect the password and database.But what I really care is where to store the username and password. Because in my application, even the password is not encrypted, it is alos ok. And I don't hope to use a seperate file to do that
Please give me a correct direction
Thank you
vigorous
|
|
|
|
|
wk_vigorous wrote:
even the password is not encrypted
ENCRYPT THE PASSWORD! People share the same password between many applications, quite simply the average person today is overloaded with passwords to remember, so they take the easy route and have only a small number of passwords they reuse. If you leave the password exposed you are leaving your user exposed. TAKE SOME RESPONSIBILITY FOR THIS.
You cannot believe how irritated I am when I see that someone has not taken the time to secure my personal information. I count passwords as highly sensitive personal information.
"You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar
The Second EuroCPian Event will be in Brussels on the 4th of September
Can't manage to P/Invoke that Win32 API in .NET? Why not do interop the wiki way!
My Blog
|
|
|
|
|
Thanks, and I now fully understand the importance of encryption. Could you introduce some way to encrypt data in C#? And I am still confused about the place to store the password. Where do you think is a suitalbe location?
Thank you
vigorous
|
|
|
|
|
If you're asking such an over-simplified architectual question, I'd have to say it seems like you don't know where to begin - not a good sign if you think you can write your own security system. It's not easy and is often too over-simplified.
There are already mechanisms in place for this, such as using encrypted requests to a SQL Server 2000 database (or MSDE) where the passwords are hashed - NEVER store the passwords in plaintext.
If you want to protect a local, non-connected application, there is already facilities in Windows. Take a look at the article, How to Create a DPAPI Library[^], in the Microsoft Patterns and Practices section for one pretty secure method. This encapsulates DPAPI - a native API - in a .NET assembly that you can use with any managed language (C#, VB.NET, MC++, Perl.NET, etc.).
There are other ways, but you should study what exists by browing and searching MSDN[^], especially their Patterns and Practices[^] section which covers design, development, and deployment concepts including security in your application.
Security is definitely not something to take lightly.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|