这是上下文:我必须为Intranet站点编写一个源,允许用户将csv文件导入MySql数据库。
这个导入非常庞大,这就是我编写c#程序的原因。
这个程序会创建一些线程来读取我的csv文件的某些行。
这些线程控制,更改类型并使用sql将我的数据插入到MySql数据库中:
insert into table1 (fields) values (dataline 1 ), (data line 25),...,(data line n);
此请求适用于9个表。
这个程序可供所有人使用,因为源代码是动态的:插入数据的示例我写了一个字典,其中包含我的9个表,包含导入文件的所有字段,类型和CSV标题(包含一些重音和符号,我要更改它,因为我不能将它们放入我的数据库中的fieldname中)。
此字典只能使用名为MAP.csv
的文件创建示例:
table / field / type / header
table 1 / field1_table1 /string / hêàder
table 1 / field2_table1/ int / header1
table 2 / field1_table2/ date / hêàder2
table 1 / field3_table1/ string / hêàder3
执行program.exe时,我的c#程序运行良好
但是当我用php exec("programpath.exe parameter1 parameter2",return,otherreturn)
函数调用它时,这个程序无法工作。
实际上,当我尝试使用我的c#程序访问externfile,如config.xml,MAP.csv,otherfile.txt / csv / ..执行停止并且有一个Windows错误,上面写着“program.exe停止工作”(法语为program.exe à cessé de fonctionner
)。
所以我尝试简单地编写我的问题:当我尝试使用php调用的c#程序访问文件时,有一个窗口问题会阻止这个问题。
编辑: 我找到了解决方案,我只需要做一个cd c:/ path_program / 事实上,当我启动我的网站时,当前文件夹不是c:/但是symfony中的文件夹启动... 只是一个初学者错误。 谢谢大家的帮助! CIA
答案 0 :(得分:0)
可能是权限问题。
Web服务器在某个安全上下文(用户)下运行。取决于使用的Web服务器(IIS,apache,...)及其配置。
当您从PHP执行应用程序时,它将在与WebServer相同的“用户”下运行。
您说过,只要外部文件被访问,您的应用程序就会崩溃 - >很可能执行网站的用户有权运行exe但无权访问配置文件。
您使用相对路径来访问该文件: 要将应用程序路径的相对映射到绝对路径,您可以使用此代码段:
string appPath = System.Windows.Application.ResourceAssembly.Location;
string relativeResourcePath = "RESSOURCES/file.csv";
string absolutePath = System.IO.Path.Combine(appPath, relativeResourcePath);
答案 1 :(得分:0)
检查解决方案的编辑帖子