Introduction to Isolated Storage
When an application stores data in a file, the file name and storage location must be carefully chosen to minimize the possibility that the storage location will be known to another application and, therefore, vulnerable to corruption. Without a standard system in place to manage these problems, developing ad hoc techniques that minimize storage conflicts can be complex and the results can be unreliable.
With isolated storage, data is always isolated by user and by assembly. Credentials such as the origin or the strong name of the assembly determine assembly identity. Data can also be isolated by application domain, using similar credentials.
When using isolated storage, applications save data to a unique data compartment that is associated with some aspect of the code's identity, such as its Web site, publisher, or signature. The data compartment is an abstraction, not a specific storage location; it consists of one or more isolated storage files, called stores, which contain the actual directory locations where data is stored. For example, a Web application might have a data compartment associated with it, and a directory in the file system would implement the store that actually preserves the data for that application. The data saved in the store can be any kind of data, from user preference information to application state. For the developer, the location of the data compartment is transparent; stores usually reside on the client, but a server application could use isolated stores to store information by impersonating the user on whose behalf it is functioning. Isolated storage can also store information on a server with a user's roaming profile so that the information will travel with the roaming user.
Administrators can limit how much isolated storage an application or a user has available, based on an appropriate trust level. In addition, administrators can remove all a user's persisted data. To create or access isolated storage, code must be granted the appropriate IsolatedStorageFilePermission.
To access isolated storage, code must have all necessary native platform operating system rights. For example, on Windows 2000 the access control lists (ACLs) that control which users have the rights to use the file system must be satisfied. Microsoft .NET Framework applications already have operating system rights to access isolated storage unless they perform (platform-specific) impersonation. In this case, the application is responsible for ensuring that the impersonated user identity has the proper operating system rights to access isolated storage. This access provides a convenient way for code that is run or downloaded from the Web to read and write to a storage area related to a particular user.
Sometimes it is helpful to verify a change to isolated storage using the file system of the operating system. Developers might also need to know the location of isolated storage files. This location is different depending on the operating system. The following table shows the root locations where isolated storage is created on a few common operating systems. Look for Microsoft\IsolatedStorage directories under this root location. You must change folder settings to show hidden files and folders in order to see isolated storage in the file system.
Operating system |
Location in file system |
---|---|
Windows 98, Windows Me - user profiles not enabled |
Roaming-enabled stores = <SYSTEMROOT>\Application Data NonRoaming stores = WINDOWS\Local Settings\Application Data |
Windows 98, Windows Me - user profiles enabled |
Roaming-enabled stores = <SYSTEMROOT>\Profiles\<user>\Application Data Nonroaming stores = Windows\Local Settings\Application Data |
Windows NT 4.0 |
<SYSTEMROOT>\Profiles\<user>\Application Data |
Windows NT 4.0 - Service Pack 4 |
Roaming-enabled stores = <SYSTEMROOT>\Profiles\<user>\Application Data Nonroaming stores = <SYSTEMROOT>\Profiles\<user>\Local Settings\Application Data |
Windows 2000, Windows XP, Windows Server 2003 - upgrade from NT 4.0 |
Roaming-enabled stores = <SYSTEMROOT>\Profiles\<user>\Application Data Nonroaming stores = <SYSTEMROOT>\Profiles\<user>\Local Settings\Application Data |
Windows 2000 - clean install (and upgrades from Windows 98 and NT 3.51) |
Roaming-enabled stores = <SYSTEMDRIVE>\Documents and Settings\<user>\Application Data Nonroaming stores = <SYSTEMDRIVE>\Documents and Settings\<user>\Local Settings\Application Data |
Windows XP, Windows Server 2003 - clean install (and upgrades from Windows 2000 and Windows 98) |
Roaming-enabled stores = <SYSTEMDRIVE>\Documents and Settings\<user>\Application Data Nonroaming stores = <SYSTEMDRIVE>\Documents and Settings\<user>\Local Settings\Application Data |
Windows Vista |
Roaming-enabled stores = <SYSTEMDRIVE>\Users\<user>\AppData\Roaming Nonroaming stores = <SYSTEMDRIVE>\Users\<user>\AppData\Local |