Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否使用Windows7修改.EXE.CONFIG文件中的ConnectionString?_C#_Windows 7_Sql Server Ce - Fatal编程技术网

C# 是否使用Windows7修改.EXE.CONFIG文件中的ConnectionString?

C# 是否使用Windows7修改.EXE.CONFIG文件中的ConnectionString?,c#,windows-7,sql-server-ce,C#,Windows 7,Sql Server Ce,我在Users Application Data文件夹下有一个SQL Server CE 4.0(SDF)文件(因为由于Win7 UAC,如果数据库位于\Programs Files\文件夹中,则无法修改它。但问题仍然是,我现在(安装时)需要修改.EXE.CONFIG文件(ConnectionString)指向数据库的新路径,但显然我无权修改\Program Files\文件夹中的.EXE.CONFIG文件 那么人们如何解决这个问题呢? 您可以将.EXE.CONFIG文件与SDF文件一起部署到用

我在Users Application Data文件夹下有一个SQL Server CE 4.0(SDF)文件(因为由于Win7 UAC,如果数据库位于\Programs Files\文件夹中,则无法修改它。但问题仍然是,我现在(安装时)需要修改.EXE.CONFIG文件(ConnectionString)指向数据库的新路径,但显然我无权修改\Program Files\文件夹中的.EXE.CONFIG文件

那么人们如何解决这个问题呢? 您可以将.EXE.CONFIG文件与SDF文件一起部署到用户应用程序数据文件夹吗?如果不能,如何部署?我无法相信您需要授予对\Program Files\Application文件夹的特殊访问权限才能完全访问

我使用的是VS2010,使用的是标准部署项目(MSI),我看不到在一个地方部署.EXE,在另一个地方部署.EXE.CONFIG(可以这样做吗?这是正确的解决方案吗?)


谢谢,

使用连接字符串中的
%APPDATA%
变量,您不必修改配置文件。这也比硬编码包含用户名的路径更灵活,因为它将允许计算机的所有用户使用您的程序并拥有自己的.sdf文件

但是,该方法是有效的,因此您需要使用
Environment.ExpandEnvironmentVariable
方法强制执行该方法:

// Example appSetting element:
//   <add key="examplePath" value="%APPDATA%\example.txt" />

string path = System.Configuration.ConfigurationManager.AppSettings["examplePath"].ToString();
path = Environment.ExpandEnvironmentVariables(path);
System.IO.File.WriteAllText(path, "foobar");
//示例appSetting元素:
//   
字符串路径=System.Configuration.ConfigurationManager.AppSettings[“examplePath”].ToString();
路径=环境。ExpandEnvironmentVariables(路径);
System.IO.File.WriteAllText(路径“foobar”);

使用连接字符串中的
%APPDATA%
变量,您不必修改配置文件。这也比硬编码包含用户名的路径更灵活,因为它允许计算机的所有用户使用您的程序并拥有自己的.sdf文件

但是,该方法是有效的,因此您需要使用
Environment.ExpandEnvironmentVariable
方法强制执行该方法:

// Example appSetting element:
//   <add key="examplePath" value="%APPDATA%\example.txt" />

string path = System.Configuration.ConfigurationManager.AppSettings["examplePath"].ToString();
path = Environment.ExpandEnvironmentVariables(path);
System.IO.File.WriteAllText(path, "foobar");
//示例appSetting元素:
//   
字符串路径=System.Configuration.ConfigurationManager.AppSettings[“examplePath”].ToString();
路径=环境。ExpandEnvironmentVariables(路径);
System.IO.File.WriteAllText(路径“foobar”);

Odly够了,似乎不起作用,它仍然是这样(无法解析)…我的解决方案是在代码中(在初始化时)读取连接字符串,如果找到%APPDATA%,则用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)替换它(string replace)@JSchwartz感谢您指出这一点!我发布了我的答案,没有编写代码来验证它,但我刚刚弥补了这一点,学到了一些新的东西并编辑了答案。很遗憾,这似乎不起作用,它仍然是这样(无法解决)…我的解决方案是在代码中(在init上)读入连接字符串,如果找到%APPDATA%,则用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)@JSchwartz替换它(字符串替换)@JSchwartz谢谢你指出这一点!我发布了我的答案,没有编写代码来验证它,但我刚刚弥补了这一点,学到了一些新东西并编辑了答案。