Computer Magic
Software Design Just For You
 
 

Do you always get what you pay for?

April 26th, 2006

Normally I don’t trash on other companies in a public forum, even when the service is poor, but some times the service is so poor that you just need to make your voice heard. In my case, I had several clients sign up a few years ago for web hosting with a company originally called DR2.NET. They had excellent service and great prices. Over time though, they got bought out. Then, that company got bought out. After four buyouts (yes 4!) they are now called WebHostPlus (www.webhostplus.com). Just before that, they were NetBunch (www.netbunch.com).

The reason that I specifically mention them is that by the time they became Netbunch, their service was so poor that it would literally take a month to get a secure certificate installed (this is once we already had the certificate issued!). Now that thay have been bought out by WebhostPlus, it has taken over two months (yes 2 MONTHS) to get a domain name transferred… and it still isn’t done!

Want to get a refund when you move from their service? They will promise to do so but neither I nor any or my clients have yet to see a dime.

You can call or submit tickets. Tickets generally take over a week (or more, some still haven’t gotten responses) to get any kind of response. The response you get is that the problem has been forwarded on to a different department never to be heard from again. It is actually against company policy for them to hand out contact information for those other departments. At one point, my request for the domain transfer was forwarded on to the owner of the company. That was over a week ago… Still no word.

Calls result in the same response “we will forward it on to the appropriate department”.

All these issues with my own sites and with my clients sites has resulted in lower customer satisfaction. As such, this was the push that conviced us to start offering hosting ourselves. It was one of the best choices we made all year. What makes the choice so great is not so much the new money that comes in (we actually gave discounts and such to make up for issues with past service through WebHostPlus) but in time savings. Now, if something is wrong, we simply fix it. No more waiting a week to install a secure certificate, no more spending 20 hours over 2 months calling and submitting tickets just to get a domain name transfered. We can have a certificate issued and installed in as little as 30 minutes! We can now even offer certificates for half (thawte) or a third (verisign) of the price of other companies. We can have your site up and running (domain name an all) in as little as 30 minutes.

Our clients are happier due to one point of contact, one bill, and MUCH better service. We are happier due to the ability to just get the job done. It amazes me that there are companies out there who don’t seem to want to do what they are in business for. As in other industries, web hosting companies live and die by their reputation for service and reliability. My guess is that unless things change drastically, WebhostPlus would be a bad place to turn in a resume if you are looking for job security.

Am I bitter? Not really. It has been a good business move to offer hosting services to our clients and WebHostPlus helped push us in that direction. What I don’t want is forr others to get burned the way we were. There are so many good hosting services out there. Spread the word, write your own reviews, let people know what these companies are really like before they hand over their hard earned cash. Don’t get caught giving money to these companies like WebHostPlus that make promises but don’t deliver. Getting what you pay for is an issue we face in any industry and it is the reason that Computer Magic is growing. When people want good service from people who can get the job done for a resonable price, they know where to turn.

Ray Pulsipher

Owner

Computer Magic And Software Design

The Report Viewer and Filters on your Binding Source.

March 21st, 2006

It is suprising how much information is on the net, and how little there is regarding your particular problem. For my particular problem, I could find no easy examples on how to make a binding source apply a filter when using the ReportViewer control in .NET 2005. It just didn’t work! Once I got back to basics, I realized that there is an easy solution.

Many people want to use the Microsoft Report Viewer control in either ASP.NET or WinForms in Local Mode. Local Mode allows you to generate a report without the need to use the whole Reporting Services server. For a standalone application (or for anyone who wants to avoid the headache of getting the Reporting Services Server installed and configured) the Report Viewer control will allow you to create a report and host it right in your application. The down side is that some features such as report parameters don’t work.

This changes how you create your report somewhat. If you only wanted to print information on the current user, you could send the users ID as a parameter and let that drive the filtering of data. When you run locally, you have to make sure that your data sources are already filtered before assigning them to the report. The report now wants you to send only data that is to be displayed. Any extra data will also be displayed!

I can hear you all now saying “No problem! The bindingsource control has a filter property on it. We will just set that and be done with it!” Unfortunately that doesn’t seemto work. After applying the appropriate filters on your binding source control, the report will still display incorrect/all information in the underlying dataset.

There are a few ways to get around this. One is to create a new dataset and copy all pertinent records, then set the reportviewer control to use this as its datasource. The problem with this is it can be a lot of extra work, expecially for something that should be “drag and drop”.

We could change how the dataset is filled initially, but this may not be what we are looking for and again can cause the lines of code to add up or require multiple data sets to be defined.

When you drop the reportviewer control onto your form, you can use the smart tag to define both the report file and the data sources. New Datasets, binding sources, and table adapters get added to your form automatically when you do so. By doing this, there is only one thing left to do. The binding source controls that were created reference the dataset in question but they reference a particular table in that dataset. To apply filters, you need to use the DefaultView property of a table (or your own custom view). This is ADO.NET 101 information, but the concept gets lost in all the connections between controls. If the binding source is bound directly to the data table, then you can’t apply filters as a data table doesn’t support them. The solution is to assign a different data source to the binding source control that does support filtering.

I have a button that generates the report. Assuming that all the datasets are previously populated with information, here is how I apply my filter and reassign my binding source. You don’t have to even touch the reportviewer control (other than to tell it to render) as it should already be looking to the binding source for its data.



Me.dataset.user_list.DefaultView.RowFilter = "[id]=" + cboCurrentUser.SelectedValue.ToString()
Me.user_listReportBindingSource.DataSource = Me.dataset.user_list.DefaultView

Me.ReportViewer1.RefreshReport()

We apply the filter to the appropriate table’s DefaultView which does support filtering, then assign that DefaultView as the data source for the binding adapter. At this point, we can simply tell the reportviewer control to refresh and it will use the correctly filtered data as expected.

I haven’t tested it, but once the bindingsource is using the DefaultView (which supports filters) we may be able to use the binding source filter property instead of the DefaultView filter property. It is the same number of steps though, and this was the first way I got it to work without writing books of code.

It would have been nice if MS had made the binding source point to the DefaultView as its data source by default rather than the data table and saved us the extra work. Maybe by the 2007 version they will have gotten the message. Regardless, this is a great control with great features. If you haven’t looked at it yet, you should.

Ray Pulsipher

Owner

Computer Magic And Software Design

Automatic Redirection and the UseCanonicalName Directive

March 20th, 2006

Did you know that you get redirected on a very regular basis? Many people, including most web server admins it seems, don’t completely understand the makup of the URL that we use so often. Lets look at a URL and break down its components. We will be using one from this site.



https://www.cmagic.biz/wordpress/

First of course, we start with the protocol (HTTP). This is automatically added on if you leave it off. It is an instruction to the browser as to which type of communication should take place. Internet Explorer can communicate over several different protocols (FTP, LDAP, etc..) and at times need a hint as to how you want to connect to the remote computer.

Next is the DNS name of the computer (www.cmagic.biz). You could also put in the IP address, but who rememebers those? What is the IP address of google? The name makes it easy for people to remember and find your site again.

Next is the “/” character. Notice that I haven’t gotten to the folder yet (wordpress). The “/” character is an important part of the URL as it not only seperates one part from the next, but it also indicates that we are requesting a folder rather than an actual page. Remember, I could actually have a file called (wordpress) on my site. Should we show what is in the folder (wordpress) or the contents of the file named (wordpress)? We don’t very often have files and folders with the same name. We also generally add an extension after the file name (.html, .php, .asp, etc…). The web server itself doesn’t really care if a file has an extension or not (other than to know how to do any special parsing).

When you go to (www.cmagic.biz), you are asking for the web root directory on that server (web root is the root of the web file system, but will almost never be the real root of the web servers file system, that is why we refer to it as the web root). When you request (www.cmagic.biz), any properly configured server will actually redirct you. Asking for the server (www.cmagic.biz) isn’t enough. It needs to know what page you want displayed (or show you a directory listing).

To keep from confusing you, the web server will redirect to the following address (www.cmagic.biz/). Notice the trailing “/” character. This means “show the root directory on this site”. Without the “/” character, there is no indication which folder the content should actually come from. We can make the assumption that if you come to (www.cmagic.biz), that what we really want is the “/” directory.

Once the web server knows which directory to service, it has to either show a list of files and folders it contains (if directory browsing is on) or show a default document. Thus, when we go to (www.cmagic.biz), we actually are requesting (www.cmagic.biz/index.php), we just may not know it. It all happens automatically.

I had an issue the other day on a site where the redirection was not configured correctly. The site (http://edumed.mine.nu) worked ok until you clicked certain links. The best thing you can do when you design a site is always add trailing “/” characters to your links when you are linking to a folder (eg: /test/ instead of /test). With the trailing “/” already in place, your link will work regarless of the server configuration and may save you some headache. My problem is that when I built the site (a number of years ago) it was built on a server that was configured correctly. When I recently moved it, the new server would redirect ok (it added the trailing “/”), but it would add a (www) at the beginning of the URL. By doing so, some browsers see the redirect as a move to a different site (www.edumed.mine.nu could be a different box than edumed.mine.nu). This move would actually make some browsers think that the user had not logged in and show them a page error (you do not have permission to view this page). My possible solutions were to go through the whole site and update any and all links that didn’t have the trailing “/” in them (can you say tedious and time consuming) to avoid the redirect completely, or to have the configuration in Apache changed so that the (www) was not added to the beginning.

Why couldn’t I just send all my users to the (www) address instead? Too many users who had not used that address in the past. It would be too confusing and too time consuming to educatate all the users. Besides, the server was misconfigured, and it should be setup correctly!

It took some time and effort to convey the problem to the guy managing the server. Not that I am trying to criticize the serivce (they are great), but I had to actually send them the fix in the httpd.conf file before they could understand that it was an Apache configuration issue and not a user error. The problem was that while this was a 100% reproducable issue, it was obscure enough and the understanding of the URL was incomplete on the techs end. The Apache documentation describes this process fairly clearly (and also proves that it is a configuration issue).

Am I ranting about poor service? Definatly not! It is important to have a firm understanding of the software you are working with. A lack of such will only make your life more difficult. Hopefully this will spread the word on a poorly understood subject and save many hours of troubleshooting.

Want the Apache docs? Here are the links.

Ray Pulsipher

Owner

Computer Magic And Software Design

The AJAX primer

March 6th, 2006

Good morning all. Today we will try to demystify the whole AJAX evolution. Lets start by breaking down the acronym. The first letter (A) stands for asyncronous. This simply means that more than one thing can happen at once. Have you ever been using a program, and you click a button and it seems to just freeze? This is an example of a program that is not asyncronous. It can only do one thing at a time. With AJAX, you can have multiple request going independant of each other without the main interface (the web page) suffering. This is very important as your browser can use AJAX to load information without interrupting you. The old non AJAX solution for communicating with the server would be to refresh the entire page, during which time you could do nothing until the process was complete (non asyncronous mode). The browser giants decided that they would include the abillity to make a request back to the web server without refreshing the page. This gave birth to the object HTTPRequest. This object can run in asyncronous mode and simply emulates the underlying mechanism used by the browser that makes the request to the server and gets back the response (generally the response is the rendered page). It is this new feat (the ability to make a request without refreshing the whole page) that gave birth to what we now think of as AJAX. Everything else was already possible before.

Next, the JA stands for JavaScript. JavaScript (not to be confused with Java, which is a different programming environment) is the scripting language that you can embed into your web pages. This language can take advantage of the DOM object model which allows you to locate and manipulate items in a web page. For instance, creating a DIV tag and giving it a name will allow you to write JavaScript that can update its contents without having to refresh the whole page. Here is an example.



<SCRIPT src="prototype.js" type="text/javascript" ></SCRIPT>
<DIV id=test></DIV>
<SCRIPT language="javascript">
$('test').innerHTML = "It Works!";
</SCRIPT>

Before this example will work, you will need to downlod the prototype library. We will talk about this more in a minute.

The previous script uses the DOM object model to update the contents of a DIV tag on the page. This can happen in real time without having to refresh the whole page. The code here happens when the page loads, but it could be easily tied to a button click or some other event. Even though this can change the page, what you really want to do is to get the current information from the server and put it in the DIV tag. JavaScript is the glue that holds all these capabilities together. It can manipulate the HTTPRequest object and put returned information into the page using the DOM object model.

Finally, the X in AJAX stands for XML. The idea is that XML is a great generic data description language and can be used to transport information in a logical and understandable format from one process to another (like communications between a server and a client browser). By using the XML spec, you can transfer raw data without having to send all the formatting information along with it and let the client JavaScript decide how to deal with this information. Now JavaScript can query just about any source (so long as it is on the same server) looking for information to update the current page with. Mostly, because I am lazy, I go ahead and return formatted data from an AJAX request and just slap the results into the page (saves me from having to interperate the XML). Which technique you use depends on your needs.

The different pieces together all add up to form the AJAX specification. AJAX is really a concept rather than an actual implementation. Most AJAX libraries include more than just the ability to make the request to the server. Once popular libary is Prototype. This library includes many other features like shortcuts to your elements, cross browser support, form serialization, etc. These features can be great time savers even if you don’t take advantage of the ability to make asyncronous requests to the server. Once such example is the abillity to refer to a element (with its ID defined) by name. This shortcut takes care of cross browser issues and makes the element avaialble to you in a clear and concise fashion.



<SCRIPT src="prototype.js" type="text/javascript" ></SCRIPT>
<DIV id=test></DIV>
<SCRIPT language="javascript">
$('test').innerHTML = "It Works!";
</SCRIPT>

The bold line shows how you can use the $ function to reference the DIV tag in question. Now try referencing that element in Internet Explorer, then in Netscape and tell me you can support both browsers easier. Even if you don’t want to use AJAX in your web application, if you use JavaScript at all, you should consider the time you will save by using a library like this.

For any of the prototype features you need to make sure that you include the JS file by using the following line:



<SCRIPT src="prototype.js" type="text/javascript" ></SCRIPT>

This just loads the JS file with all the objects and code so that it is available for use by the current page.

Now that we have that stuff out of the way, lets look at how we can use AJAX to do some cool stuff. First we will look at grabbing some content from another page and slapping it into ours without having to refresh the entire mess. We will not use the XML capabilities in this example. This is the simplest way to utilize AJAX. (NOTE: the following example may/may not work in non IE browsers, if not, add FORM tags around the INPUT tag)



<SCRIPT src="prototype.js" type="text/javascript" ></SCRIPT>
Show Google Results!
<INPUT type=button value="Get Results" onclick="new Ajax.Updater('content', 'http://www.google.com/search?hl=en&q=test', {asynchronous:true, method: 'get'}); return false;" />
<DIV id=content></DIV>

When you click the button, you will have a list of Google results listed in your page. It is that easy! Lets talk about what we just did, then we will set it up so that you can type in your own search string to get google results.

Before we show the next code snippet, notice that our DIV tag was named content and that we used ID rather than the NAME attribute. This is important as the Prototype library works off of IDs.



<INPUT type=button value="Get Results" onclick="new Ajax.Updater('content', 'http://www.google.com/search?hl=en&q=test', {asynchronous:true, method: 'get'}); return false;" />

The DIV tag is just a DIV tag with a name so that we can identify it. We create an INPUT button that allows us to click something. The button itself by default doesn’t do anything unless we write its OnClick event. When the button is clicked, we can start the AJAX code that will go get the specified web page and put the results into the item we name (our DIV tag named content). The new keyword creates a new instance of the AJAX Updater object. This will do not only the work of getting the results from the google server, but also will put the results into our DIV area. The Updater method needs some information to do its job. First we supply where we want our results to be displayed (‘content’, the name of our DIV tag). If this is left blank or you put an invalid name in here, then you just wont see any results (you may want this in some cases).

The next thing we need to tell the Updater method is what page to request. In our case, we asked for the search results from google for the word test. Go to google and type test in the search box, then hit the search button. Notice the URL in the address bar changes. I simply copied and pasted this. You can put any URL in here that you like (your own, your friends, etc..).

The last thing we send to the Updater method is an array of flags (hence, the {} symbols). This array of flags tells how to send the information (GET or POST, etc..). One flag deals with Asyncronous or non Asyncoronous mode (well go get the page in the background or will monopolize the current process while it does so). There are many options here which we will explore further.

And finally, after we call the Updater method, we return false. This will keep further events from happening. Here it isn’t such a big deal if you forget it, but I like to attach AJAX calls to a form which, if you don’t return false, you end up with a page refresh. This happens because the form is meant to request a whole new page and display it (what we are trying to avoid!). By returning false, we can cancel the submit (our AJAX call runs in the background still, so everyone is happy).

Lets add the ability put in our own search string and get back the Google results. We need to add FORM tags and an INPUT tag so that we can have a text box for our user to type in their search result. Also, we will change our previous INPUT from a button to a submit button. It is a special kind of button that will cause the current form to submit. We no longer need an OnClick attribute as the form will handle things from here. The for has its own attribute called OnSubmit that fires when the form is being sent.



<SCRIPT src="prototype.js" type="text/javascript" ></SCRIPT>
Show Google Results!
<FORM METHOD="POST" onsubmit="new Ajax.Updater('content', 'http://www.google.com/search?q=' + $('q').value, {asynchronous:true, method: 'get'}); return false;">
<INPUT type=text ID=q>

<INPUT type=submit value="Get Results" />
</FORM>
<DIV id=content></DIV>

We don’t actually let the form submit (the return false is there) but we do submit our information via the AJAX Updater method. Where we specify the URL to submit to, we add the value in our text box. Give it a try, you can now have search results right in your own web site.

Some might ask, why couldn’t we have just modified the OnClick attribute of the button rather than adding all the form tags and such? Look at the note above that snippet of code. Some browsers do not like INPUT tags outside of FORM tags and won’t display them correctly. This is the method that is least likely to cause you trouble.

One last addition before we go. We will add a parameter to the google search that will show only results from your own site. Go to google and type test site: www.cmagic.biz. This will show you only results from my site. Look at the resulting URL and put that into the previous example. Now, you can show only results from your site! Here is the code again with the change.



<SCRIPT src="prototype.js" type="text/javascript" ></SCRIPT>
Show Google Results!
<FORM METHOD="POST" onsubmit="new Ajax.Updater('content', 'http://www.google.com/search?q=' + $('q').value + ' site: www.cmagic.biz', {asynchronous:true, method: 'get'}); return false;">
<INPUT type=text ID=q>

<INPUT type=submit value="Get Results" />
</FORM>
<DIV id=content></DIV>

As you can see, AJAX can do some very cool stuff rather easily. We didn’t even show the ability that the prototype library has to wrap up all your forms variables for you in one call, or how it can utilize XML results to send just the data (rather than the fully rendered results).

If you decide to try AJAX out in one of your own projects, don’t try to roll your own. Use one of the available packages out there and save yourself some time and headaches. If you don’t want to use AJAX in your projects, but you do use JavaScript, think about using a library like prototype just because of the convenient way in which you can manipulate your page content in a platform neutral way.

Ray Pulsipher

Owner

Computer Magic And Software Design

CASPOL is your friend – do you trust me?

February 27th, 2006

Here is a nice tid bit of information. A feature added to the .NET framework called CAS (Code Access Security) was designed to allow you to run .NET code in a sandboxed environment (much like running Java applications in the Virtual Machine). Java applets (Java programs embedded into a web page) by default can not do things like read files on your hard drive. The .NET framework has similar security features.

By default, applications run from your own computer (off your own hard drive) have Full Trust. This means that it can pretty much do anything to your computer that you as a user have access to do. The CAS system uses the same zones that internet explorer uses (IE -> Tools -> Internet Options -> Security Tab). When you try to run a .NET application from a network share or mapped drive, that application falls under the Local Intranet Zone. This zone is more restrictive and keeps applications from behaving badly and deleting all your files (unless you copy it to your local drive).

There are a few solutions to this problem. One is to trust the application. This requires that you sign the application with a strong name. I am not going to go into much detail on this except to say that you would have to do this for each application (and possibly it’s DLL files).

This particular article is not about deployment (there are many good articles on that topic). This article is more specifically for development. The presence of the CAS system makes it difficult to keep your project files on a file server. You get a message similar to this:



The project location is not trusted.

Running the application may result in security exceptions when it attempts to perform actions which require full trust.

The problem isn’t generally that the code won’t open, it is that when you hit that play button to run your program, it may not be able to run then. When you are writing the software, you want the program to run as if it is on your box.

Signing each component could become quite a burden if the resulting application does not require signing when you release it. If you are like me, you have many projects on your file server and signing each one would just take more time out of your busy day. Since you have control over your file server, you can generally trust the information on it. Here I will show you a technique that will allow you to give Full Trust to a mapped network drive. This could be a security hole, so make sure you really do trust the server that is storing your project.

The nice thing about trusting a mapped drive is that you can trust all projects on that drive. Just run the command once and forget about it.

First, change to the directory where the caspol.exe file is located. You can change the version directory (the last one) to suit your installation, but any of the three should work (.NET 1.0, 1.1, or 2.0). We are using the directory for version 1.1. Open a command prompt (Start -> Run -> cmd -> Enter) and type the following.



CD C:\Windows\Microsoft.NET\Framework\v1.1.4322

Before we show you the actual command, lets demonstrate something. You can see a list of items already in place. The following is the command to show the list (in bold) followed by its output.



caspol -ld
Microsoft (R) .NET Framework CasPol 2.0.50727.42 Copyright (c) Microsoft Corporation. All rights reserved.

Security is ON
Execution checking is ON
Policy change prompt is ON

Level = Machine

Code Groups:

1. All code: Nothing
1.1. Zone - MyComputer: FullTrust
1.1.1. StrongName - 00240000048000009400000006020000002400005253413100040 0000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE
79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E82
1C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8
A12436518206DC093344D5AD293: FullTrust
1.1.2. StrongName - 00000000000000000400000000000000: FullTrust
1.2. Zone - Intranet: LocalIntranet
1.2.1. All code: Same site Web
1.2.2. All code: Same directory FileIO - 'Read, PathDiscovery'
1.3. Zone - Internet: Internet
1.3.1. All code: Same site Web
1.4. Zone - Untrusted: Nothing
1.5. Zone - Trusted: Internet
1.5.1. All code: Same site Web
Success

Notice the numbers (1.2, 1.2.1). This will be needed when we show you the command. Notice that it is a hierachal layout. We will put our item under the Local Intranet section as a mapped drive exists on the local intranet.

The next thing you will need is a mapped drive. I mapped a Z drive to my network share. If you don’t use the drive letter Z, replace that with your own. Ready for the command? Here it is.



caspol -q -machine -addgroup 1.2 -url file://z:/* FullTrust -name "Z Drive" -d "Trusted network drive"

Lets break it down now. The -q option just means quite. The -machine option causes the change to happen at the machine level, meaning it will modify your machines configuration. The -addgroup option says put the new item under the 1.2 group (see the previous list, it puts it in the Local Intranet section).

The -url option is the one that says what path to trust. You could probly use a UNC (Universal Naming Convention) path instead of a mapped drive. You could also use an HTTP address here (it is expecting a URL after all). The key thing to remember is that it expects a URL, so any file paths (UNC or mapped drive) will require the file:// item at the beginning.

By having the * symbol after the drive letter, we are saying trust ALL folders in this path. If we left it off, we would only be trusting that directory and not all subdirectories.

Next, we fill in the trust we want to grant (Full Trust). We could deny running code here if we put in Nothing, but instead we want code to run from this mapped drive as if it were on this computer. Here is a list of possible options we could put in there.



Nothing - No access at all
Full Trust - Runs as if it resides on the current box
Local Intranet - Gets the same rights as any other Local Intranet application (limited)
Internet - Gets very few rights, treats it as if it has cooties
Skip Verification -
Execution - Can execute, but not a lot else
Everything - Um, don't use this one, its like full trust except it gives away the farm.

The last two options allow you to specify a name and a description. You need this to be able to identify your group later if you need to remove or modify it.

Once you have granted trust rights to your application path, you can see it in the list. Run the same command again and look at your new item.



caspol -ld
Microsoft (R) .NET Framework CasPol 2.0.50727.42 Copyright (c) Microsoft Corporation. All rights reserved.

Security is ON
Execution checking is ON
Policy change prompt is ON

Level = Machine

Code Groups:

1. All code: Nothing
1.1. Zone - MyComputer: FullTrust
1.1.1. StrongName - 00240000048000009400000006020000002400005253413100040 0000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE
79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E82
1C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8
A12436518206DC093344D5AD293: FullTrust
1.1.2. StrongName - 00000000000000000400000000000000: FullTrust
1.2. Zone - Intranet: LocalIntranet
1.2.1. All code: Same site Web
1.2.2. All code: Same directory FileIO - 'Read, PathDiscovery'
1.2.3. Url - file://z:/*: FullTrust
1.3. Zone - Internet: Internet
1.3.1. All code: Same site Web
1.4. Zone - Untrusted: Nothing
1.5. Zone - Trusted: Internet
1.5.1. All code: Same site Web
Success

Notice your new item. From here on, you should be able to open up your Visual Studio projects and run .NET applications from a shared drive without the trust warnings or errors (you might need to close Visual Studio completely before it will work).

Before we go, I want to leave you with the command to remove a group once you have added it.



caspol -rg 1.2.3

Notice that the label is the numeric value in front of your item when you use the -lg option to list the groups. Be careful not to remove one of the system groups or you will give yourselfe a very big headache. Use the FULL label for your item (not 1.2, but 1.2.3!).

Hope this helps!

Ray Pulsipher

Owner

Computer Magic And Software Design


Home | My Blog | Products | Edumed | About Us | Portfolio | Services | Location | Contact Us | Embedded Python | College Courses | Quick Scan | Web Spy | EZ Auction | Web Hosting
This page has been viewed 870413 times.

Copyright © 2005 Computer Magic And Software Design
(360) 417-6844
computermagic@hotmail.com
computer magic